5

私は助けが必要です。IE9 で次のエラーが発生します。コードは FireFox で動作しています。

SCRIPT438: Object doesn't support property or method 'on' 

これは、次のコードで発生します。

$(function() {
    $(document).on('change', '#dropdownval select', function(event) {
        //logic function
    });
});
4

2 に答える 2

10

IE ではなく Firefox で動作しますか?

両方のブラウザが同じソースをロードしていることを確認します。正直なところ、.onjQuery 1.6 を使用しているときに Firefox で使用するのは少し無理です。メソッドが存在しないからです。

コンソール (IE では F12 開発者ツール、Firefox では Firebug) 内で次のように入力します。

jQuery.fn.jquery

これにより、その特定のページにロードされた jQuery の現在のバージョンが返されます。たとえば、今日の時点で、ここでそのコマンドを StackOverflow で実行すると、"1.7.1". 次に、メソッドの存在をテストするために、.on二重否定を使用して真のブール値にキャストし、括弧なしでメソッドにアクセスできます。

!!jQuery.fn.on // True if .on is present, False otherwise

jQuery 1.6 では、.on ではなく .delegate を使用します

.onjQuery 1.6 を使用しているため、jQuery 1.7 で導入されたメソッドにアクセスできません。適切なフォールバックは、代わりにメソッドを使用することです。または、最新バージョンの jQuery ( Microsoft CDNGoogle CDNjQuery CDN.delegate )にアップグレードすることもできます。

の構文は、 の構文.delegate.on非常によく似ています。

$("#dropdownval").delegate("select", "change", function(event){
    alert( $(this).val() );
});

フィドル: http://jsfiddle.net/jonathansampson/rMBn4/

アップグレードすることにした場合...

コードに近かったが.on、イベントをオブジェクトまでバインドしたくないdocument場合 - これは、イベントが処理される前に潜在的に長い距離を伝播する必要があることを意味します。代わりに、.delegate例で行ったように、select 要素に近いものにバインドします。

$("#dropdownval").on("change", "select", function(event){
    alert( $(this).val() );
});

フィドル: http://jsfiddle.net/jonathansampson/rMBn4/1/

2 つの主な違いは、連鎖メソッドに対する最初の 2 つのパラメーターの順序であることに注意してください。では.delegate、セレクターがイベントの前に置かれます。では.on順序が逆になります。

于 2012-06-06T16:42:43.750 に答える
7

次の2つのいずれかが発生しています。

  1. $ではなくjQuery、他の場所で定義された関数です。また、

  2. $jQueryの正しいバージョンではありません。on1.7で導入されました。


jQuery 1.6の場合、次のようになりますon

$(document).on('change', '#dropdownval select', ...)

delegate(1.4以降、非推奨の1.7)を使用して記述できます。

$(document).delegate('#dropdownval select', 'change', ...)

live(1.3以降、非推奨)を使用して記述できます。

$('#dropdownval select').live('change', ...) 

その他のオプションと注意事項については、ドキュメントを参照してください。

を使用すると、(のように)体の「下」に取り付けるdelegate ことができますが、いつものように体のレベルで取り付けます。したがって、ターゲットが配置されている場所によっては、上記の記述がより効率的になる可能性があります。onlive

ハッピーコーディング。

于 2012-06-05T06:19:19.883 に答える