4

IE9とFF19の両方で正常に実行されるjQueryコードがありますが、Chromeバージョン25.0.1364.172では正しく機能しないようです。jQuery1.7.1の使用

2つのドロップダウンリストと1つのボタンがあります。最初のページの読み込み時に、クリックイベントハンドラーは、jQueryを介してddlistとボタンの両方のオプション要素に接続されます。IEとFFの両方で、イベントハンドラーは3つのイベントすべてに対して起動します。よく働く。ただし、Chromeでは、ボタンイベントハンドラーのみが起動されます。選択オプションのクリックイベントハンドラーは起動されません。

 $(document).ready(function () {

    $('#ddlCategory').on('click', 'option', function (event) {

        // BREAKPOINT ON FIRST LINE IN THIS BLOCK NEVER HITS WHILE IN CHROME BUT DOES IN IE & FF
        if ($(event.target).val() == -1)
            return;
       more code...
    });

    $('#ddlSubCategory').on('click', 'option', function (event) {
        ResetSubCatOptionDisplay();
        var selectedId = $(event.target).val();           
        more code....
       // BREAKPOINT ON FIRST LINE IN THIS BLOCK NEVER HITS WHILE IN CHROME BUT DOES IN IE & FF
    });

    $('#btnAddSubCat').click(function (event) {
        ManageWarningDisplay(false, "");

        more code...
        // BREAKPOINT ALWAYS HITS ON FIRST LINE IN THIS BLOCK FOR ALL 3 BROWSERS
     });

    more code ..... 

});

'on()'関数はChromeでは機能しないのではないかと思ったので、次の構文も試してみましたが、やはり同じ結果になりました。ボタンのイベントハンドラーの場合のように、Chrome Dev Toolsでブレークポイントがヒットしないため、ハンドラーをまったく接続していないようです。

    $('#ddlCategory option').click(function (event) { ...

Chromeは「option」要素のクリックイベントを好まないかもしれないと考えて、イベントハンドラーを配線して要素自体を選択しようと考えましたが、ユーザーが下矢印をクリックしても起動します。

イベントを使用している理由:ユーザーが選択の唯一のオプションをクリックしても発生しないため、「onchange」イベントを使用したくありません(特定の場合に1つしかない場合は、になります)。さらに、ddlSubCategoryコントロールの場合、実行時にクライアントでオプション要素を動的に削除および追加するため、$()。on()または$()。live()(後者は非推奨)を使用して委任する必要がありました将来のオプションに。

誰もがこれについて何か考えを持っていますか?

4

1 に答える 1

3

クリック イベントはオプションでは無効です。ただし、選択時に有効であるため、回避策は次のとおりです。

$("select#yourSelect").change(function(){
    process($(this).children(":selected").html());
});
于 2013-03-22T20:58:13.827 に答える