7

非常にニッチな問題:

ときどき (30% の時間)、prototype.js ライブラリの 3877 行目 (Google のバージョン 1.6.0.2: http://ajax.googleapis.com/ajax/libs/prototype/ ) で「未定義のハンドラー」JavaScript エラーが発生します。 1.6.0.2/prototype.js )。

このページには Google マップがあり、Prototype Window ライブラリを使用しています。

この問題は、IE7 および FF3 で発生します。

これは、FireBug が提供する情報です。

handler is undefined
? in prototype.js@3871()prototype.js (line 3877)
handler.call(element, event);

私はprototypejsのローカルバージョンに切り替え、問題のあるメソッド(createWraper)にデバッグを追加しましたが、デバッグはエラーの前に表示されません...

私はグーグルで検索し、同じ行にエラーに関する他の1つの言及を見つけましたが、答えがないので、いつか誰かが答えを持っているかもしれない場所に投稿しています:)。

4

4 に答える 4

5

オブザーバー呼び出しで誤って括弧を残した場合にも、このエラーが発生することがわかりました。

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp());

それ以外の

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);
于 2008-10-06T16:41:50.177 に答える
3

これにより、おそらくエラーが発生します。

Event.observe(myElement, 'click', myFunction(myParameters));

代わりに次のようにする必要があります。

Event.observe(myElement, 'click', function() { myFunction(myParameters) });
于 2011-03-07T12:07:32.830 に答える
3

ローカルバージョンのprototypejsに切り替えて、問題のあるメソッド(createWraper)にデバッグを追加しましたが、エラーが発生する前にデバッグが表示されることはありません...

実際、エラーが発生したときに呼び出される問題のある関数は、createWrapper内で作成された「ラッパー」です(ただし、そこでは呼び出されません)。基本的に何が起こっているのかというと、要素のイベントハンドラーとして関数をアタッチしていて、その関数は実際には存在していません。

「存在しない」関数を特定するためにデバッグ情報を入力しようとしている場合は、3871行目と3878行目のラッパー関数内にアラートメッセージまたはFirebugコンソール出力を追加します。

于 2008-09-04T12:38:42.280 に答える
2

プロトタイプのprototype.jsエラーからの「未定義ハンドラー」の本当に簡単な解決策は...プロトタイプを修正するだけです。ここでアドバイスを見つけました: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-objectで、実際に機能しています。

次の行を見つけ て、プロトタイプ 1.6.0.3 および最新の :) で解決されhandler.call(element, event); た問題に置き換え ます。if (handler) handler.call(element, event)

于 2011-01-25T02:52:13.187 に答える