object.stopPropagation()
を使用すると、イベントバブリングを停止できますが、再度有効にするにはどうすればよいですか?
Jsにobject.startPropagation
のような定義済みの関数はありますか?
編集:
問題は、JSが「オブジェクト」をクリックした場合に、イベントバブリングが不要になった後もイベントバブリングを常に停止することを記憶していることです。そのため、停止します。
document.getElementById("object").onclick = function(e){
if(e && e.stopPropagation) {
e.stopPropagation();
} else {
e = window.event;
e.cancelBubble = true;
}
}
値をまったく覚えていません。イベントe
は、onclick
が発生するたびに新しくなります。問題は、あなたが常にイベントバブリングをキャンセルしていることです:
_if(foo) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
_
e.stopPropagation
_は、イベントのバブリングを防ぐW3Cメソッドです。e.cancelBubble
_は、イベントのバブリングを防ぐためのMicrosoftのメソッドです。どちらも同じです。つまり、毎回イベントのバブリングをキャンセルしています。もっと読む ここ 。
基準が満たされた場合にのみバブリングをキャンセルするように、メソッドを変更する必要があります。
_document.getElementById("object").onclick = function(e) {
if(e && e.stopPropagation && someCriteriaToStopBubbling === true)
{
e.stopPropagation();
}
else if (someCriteriaToStopBubbling === true)
{
e = window.event;
e.cancelBubble = true;
}
}
_
UPDATE:現在のコードでは、ブラウザがstopPropagation
をサポートしている場合、if (e && e.stopPropagation)
は常にtrueになることに注意してください。 。 cancelBubble
の2番目のブレースに入る場合、最後に設定された値は記憶されません。 this fiddle を参照してください。
基本的に、要約すると、コード内でクリックするたびに伝播をキャンセルしています。エレメント階層の上の伝搬をキャンセルするかどうかを決定するには、関数にいくつかの基準を入れる必要があります。