0

jquery .prop 関数を使用してプロパティを無効にしようとしています。私は使用しました:
$("#a, #b").prop('disabled', true); 今、Chrome Developer Toolsでチェックすると、両方の要素に無効なプロパティが適用されていないことがわかります。ハードコーディングして入力すると、無効になっていないかのようにイベントが発生しました。

$("#a").click(function(){
    alert("ASD");
    });

まだ解雇された。

4

4 に答える 4

3

既に説明したように、このdisabledプロパティは画像と表のセルではサポートされていません。

イベント ハンドラーをアンバインドしたくない場合は、フラグを設定できます。次に、ハンドラ内のフラグをテストすることで、イベント ハンドラの実行とイベントの伝播を防ぐことができます。

$("#a, #b").data('disabled', true);

// ...    

$("#a").click(function(e){
    if ($(this).data('disabled')) {
        e.preventDefault();
        e.stopPropagation();
        return;
        // or just `return false;` instead of explicitly calling the methods
    }
    alert("ASD");
});

Beetroot-Beetroot.dataは彼らのコメントで良い提案をしまし

それは非常によく似た働きをします:

$("#a, #b").addClass('disabled');
// and .removeClass or .toggleClass to remove the class

// ... 

$("#a").click(function(e){
    if ($(this).hasClass('disabled')) {
       // ...
    }
    // ...
});
于 2013-06-13T10:55:19.263 に答える
2

「通常の」要素は、入力disabled要素で通常使用されるプロパティをサポートしていません。

いくつかのオプションがあります:

  1. すべての単一イベント ハンドラーを登録解除します。.off()
  2. すべてのイベントを受け取る要素の上にまったく同じサイズの子要素を配置し、それらが親に伝播するのを防ぎます。
  3. イベントハンドラーが起動されたときに読み取ることができるフラグを使用して、続行するかどうかを決定します

オプション 2 は、ウィンドウ全体をオーバーレイで覆い、イベントがページに到達するのを防ぐ「モーダル」ダイアログ ボックスでよく使用されます。

于 2013-06-13T10:55:23.120 に答える