0

ここには cond1 と cond2 の 2 つの条件があります。cond1 の場合はonclickイベントを無効にし、そうでない場合は有効にします。

これは私が釣り上げたものです:

if(cond1) {
    document.getElementById('mTag').removeAttribute("onclick");
} else {
    document.getElementById('mTag').setAttribute('onclick');
}

問題は、いったんonclick無効になると、再び有効にならないことです。その場合はcond2、有効にする必要があります。私は何を間違っていますか?これに対するいくつかの解決策を親切に提案してください。

4

4 に答える 4

4

どうしてそうするか?これはとにかく迷惑なユーザーエクスペリエンスになります。タグを無効/有効にすることをお勧めします。

document.getElementById('mTag').disabled = cond1;

クリックイベントを防ぐには、イベントが上向きにバブリングするのを防ぐ必要があります。

document.getElementById('mTag').onclick = function(e) {
    if (!e) var e = window.event;
    event.cancelBubble = !cond1;

    ...
};
于 2013-01-07T10:59:59.560 に答える
1

onclick属性を削除する必要はなく、ハンドラーでフラグを設定できます

var enable;
function myhandler() {
    if (enable) {
        //my code
    }
}

if(cond1){
   enable = false;
} else {
   enabled = true;
}
于 2013-01-07T11:00:25.643 に答える
1

フラグを設定し、ハンドラーの先頭でそのフラグを確認する方がよいと思います。

function handler(event) {
  if ( !this.flag )
    return;
  // do the actual handling
}
于 2013-01-07T11:00:39.243 に答える
1

あなたはそれを間違えました。属性を削除しても、イベントのバインドは解除されません。これは正しい方法です:

document.getElementById("mTag").onclick = null;
于 2013-01-07T10:59:57.517 に答える