4

こんにちは、ユーザーが要素をクリックしたときのデフォルトのアクションを防止し、その時間だけデフォルトのアクションを防止し、他のアクションを実行する必要があります。私が使用した

document.body.onclick = function (e) {
    e.preventDefault();
    e.stopPropagation();
}

しかし、問題は、上記のアクションを実行した後、preventDefaultandを削除する必要stopPropagationがあることです。これ以降、リンク (a href) がトリガーされないためです。では、実行後にこれを元に戻す方法は? これは純粋な JavaScript コードであり、jquery などのライブラリを使用していないことに注意してください。だから私は使用できませ.bind.unbind。これに関するアイデアは大歓迎です。

4

3 に答える 3

3

bindunbindを使用してaddEventListenerとの動作を再現できますremoveEventListener

function stopIt(e) {
  e.preventDefault();
  e.stopPropagation();
}

document.body.addEventListener("click", stopIt);

// then later

document.body.removeEventListener("click", stopIt);

addEventListener注: IE <= 8 はandをサポートしていないため、ここで説明されているようremoveEventListenerに使用する必要がありますattachEvent- https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Compatibility

于 2013-06-15T08:24:35.923 に答える
2

イベントを本文にバインドしないでください。防止する必要がある要素にイベントをバインドします。

document.getElementById('theTarget').onclick = function(e) {
    // ...
}
于 2013-06-15T08:23:12.740 に答える
1

私があなたの要求を正しく理解していれば、残念ながら を元に戻すことはできませんe.preventDefault();。ただし、デフォルトでは、ハンドラー関数はデフォルト アクションを実行する前に実行されます。したがって、あなたの場合、まったく必要ありませんe.preventDefault();。そして、イベントリスナーは<a>タグにのみ添付することを忘れないでください

var aTags = document.getElementsByTagName("a");

for (var i=0;i<aTags.length;i++){
    aTags[i].onclick = function (e) {
       // just perform your action here, don't need e.preventDefault();
    }
}
于 2013-06-15T08:56:45.800 に答える