• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォームタグのinputタグ内にカーソルを持っていくと、下記エラーとな)

フォームタグのinputタグのカーソル移動時にエラーが発生します

このQ&Aのポイント
  • フォームタグのinputタグ内にカーソルを持っていくと、エラーが表示されます。
  • エラーの内容はオブジェクトが存在しないことを意味しています。
  • このエラーは、特定の環境(prototype.js(1.6)×IE(8))でのみ発生します。Firefoxではエラーが表示されません。

質問者が選んだベストアンサー

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.5

#2, 4 です。 (※以下、全てのコードの全角空白は半角空白に置換してください。) --------- /* Prototype JavaScript framework, version 1.6.1 * (c) 2005-2009 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://www.prototypejs.org/ * *--------------------------------------------------------------------------*/ ... // 4516行目  function observe(element, eventName, handler) {   element = $(element);   var responder = _createResponder(element, eventName, handler);   if (!responder) return element;   if (eventName.include(':')) {    if (element.addEventListener)     element.addEventListener("dataavailable", responder, false);    else {     element.attachEvent("ondataavailable", responder);     element.attachEvent("onfilterchange", responder);    }   } else {    var actualEventName = _getDOMEventName(eventName);    if (element.addEventListener)     element.addEventListener(actualEventName, responder, false);    else     element.attachEvent("on" + actualEventName, responder);   }   return element;  } --------- window だけ別処理にしているわけではなさそうです。 エラーが発生しない流れは、以下のようになると思います。 ------ function loadListener (event) {  var element = document.getElementById('undefined');  var firstChild = element.firstChild; // エラー: オブジェクトがありません。 } window.attachEvent('onload', loadListener); // 実行され、エラーが発生する window.attachEvent('ononload', loadListener); // 実行されないので、エラーも発生しない ------

re999
質問者

お礼

丁寧な解説、ありがとうございました。

その他の回答 (5)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.6

横からですが… 質問文 >カーソルを持っていくと、下記エラーとなります。 #1の補足 >下記へ変更したら、エラーが表示されなくなりました。 からの推測ですが、 もしかして、何らかの処理をしたくて、スクリプトを設置しているわけではなくて、エラーが出ることだけが問題なので出なくしたいということのように感じられますが。 質問者様の文章のなかに、本来スクリプトで処理している機能が実現できているかいないかについての記載がまったくないので、ひょっとしてそのソースにはスクリプトが必要ないのではないかと思った次第です。 あるいは、少なくとも原因となっているイベント設定に関係する処理は不要であるとか? もしそうならば、関連するスクリプトの部分をはずしてしまうのが、修正するよりも簡単かと思います。 (関連する部分を特定することが、できないのかもしれませんが) スクリプトで処理する必要がまったくないのであれば、全部削除してしまうのが一番簡単です。 ( <script ~~> ~ </script> のタグを全部削除する ) 違っていたなら失礼。

  • think49
  • ベストアンサー率59% (285/482)
回答No.4

#2 です。 Google Chrome 5, IE8 で試してみましたが、onload は通りませんね…。 --------- <script type="text/javascript" src="./prototype-1.6.1.js"></script> <script type="text/javascript"><!-- Event.observe(window, 'load', function(event) { alert('window loaded (1)'); }); // 実行される Event.observe(window, 'onload', function(event) { alert('window loaded (2)'); }); // 実行されない //--></script> --------- 原因は別にあるのではないでしょうか。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

Event.observe(window, 'load', function() { となっていた箇所を、下記へ変更したら、エラーが表示されなくなりました。 Event.observe(window, 'onload', function() { ==> 不可解ですね。Prototype.jsのEvent.observe() は、Event.observe(element, eventName, handler)の構文で、 eventNameにはonを取り去ったevent名をしていするはずなのに... http://api.prototypejs.org/dom/event/observe/ windowオブジェクトは、elementじゃないから特別なのかしら...

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

■IE8「オブジェクトがありません」 ---- var element = document.getElementById('undefined'); // #undefined は存在しないので、null を返す // 行: 50 // エラー: オブジェクトがありません。 var firstChild = element.firstChild; ---- 正確にいえば、「TypeError: firstChildプロパティを持つオブジェクトが存在しません」です。 モダンブラウザならば、「TypeError: Cannot read property 'firstChild' of null」を返します。 「オブジェクトがありません」とあると、未定義の変数からプロパティを呼び出したように感じるかもしれませんが、実際はそうではなくデータ型のエラーです。 ■IE8「オブジェクトを指定してください。」 ---- hoge(); // オブジェクトを指定してください。 ---- IE8で未定義のオブジェクトを指定すると、「オブジェクトを指定してください。」のエラーを返します。 同じコードをモダンブラウザで実行すると、「ReferenceError: hoge is not defined」を返します。 ■対処法 「ライン: 3936」「文字: 5」なので、「3936行目の行頭から5文字目」付近をみてください。 掲示されたコードには3936行目を含まないので、判断が出来ません。 また、3936行目の関数をコールしている部分もみてください。 prototype.js の関数を呼び出しているコードがあるはずです。 原因としては、 ・IE8未対応のメソッドを使っている (undefined のプロパティを呼び出している) ・関数に不正な引数を渡している ・prototype.js のバグ のいずれかが考えられます。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

エラーの意味と対処方を教えてください。 =>エラーの意味は、そのまんま「オブジェクトがありません。」 ですが、prototype.jsやIE(8)に原因がある事は、おそらくないでしょう。 他にjavascriptのライブラリーとかプラグインとかを使ってませんか、 といっても、そのライブラリーのバグが原因である事もまれでしょう。 ほぼ、あなたの使い方、が誤っているのだと思われます。 対処方 =>お使いのライブラリーもしくは、あなたがコーディングした部分だけ でも提示する事が出来れば、アドバイスできるかもしれません。 自分で調べるならIE8の開発者ツール(F12)を使って、所謂デバッグ という作業をしてください。

re999
質問者

補足

Event.observe(window, 'load', function() { となっていた箇所を、下記へ変更したら、エラーが表示されなくなりました。 Event.observe(window, 'onload', function() { 但し、loadやonloadの違いなど、分かっていません。 色々試し倒したうち、たまたまエラーが表示されなくなったのがこのやり方だった、というだけ です。 今後のためにも、今回の現象を理解しておきたいので、 上記内容で、今回のエラー原因、及び正しい対処方がどういうものか、 アドバイスいただけないでしょうか?

関連するQ&A