簡単な質問です。私はお互いにonclick javascriptを使用したdivで問題が発生しています。内側のdivをクリックすると、onclick javascriptのみが起動されますが、外側のdivのjavascriptも起動されます。ユーザーは、外部divのjavascriptを起動せずに、どのようにして内部divをクリックできますか?
<html>
<body>
<div onclick="alert('outer');" style="width:300px;height:300px;background-color:green;padding:5px;">outer div
<div onclick="alert('inner');" style="width:200px;height:200px;background-color:white;" />inner div</div>
</div>
</div>
</body>
</html>
基本的に、javascriptには2つのイベントモデルがあります。 イベントキャプチャおよびイベントバブリング。イベントバブリングで、内側のdivをクリックすると、内側のdivクリックイベントが最初に発生し、次に外側のdivクリックが発生します。イベントのキャプチャ中に、最初に外側のdivイベントが発生し、内側のdivイベントが発生しました。イベントの伝播を停止するには、クリックメソッドでこのコードを使用します。
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
イベントの伝播に関する情報を確認してください here
特に、イベントハンドラーで次のようなコードを使用して、イベントの伝播を停止します。
function myClickHandler(e)
{
// Here you'll do whatever you want to happen when they click
// now this part stops the click from propagating
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
このコードを追加するだけです:
window.event.stopPropagation();
return false;
内側のdivのonclick関数から:
<div onclick="alert('inner'); return false;" ...
あなたが扱っているものは イベント伝播 と呼ばれます。
Webkitベースのブラウザのもう1つの方法:
<div onclick="alert('inner'); event.stopPropagation;" ...
これはイベントバブリングの場合です。
使用できます
e.cancelBubble = true; //IE
そして
e.stopPropagation(); //FF
これは非常に役に立ちましたが、私にはうまくいきませんでした。
私がやったことは ここ と記述されています。
そこで、外側のonclick
イベントに条件を追加しました。
if( !event.isPropagationStopped() ) {
window.location.href = url;
}
ここ は、javascriptイベントのバブリングを理解するのに役立つ参照です。
これはJqueryで私のために働いた:
$('#outer_element').click(function(event) {
if(event.target !== event.currentTarget) return;
alert("Outer element is clicked")
});
この方法では、現在のターゲットが外側のdivと同じでない場合、何もしません。子要素に通常の機能を実装できます。
使用できます
$("divOrClassThatYouDontWantToPropagate").click(function( event ) {
event.stopPropagation();
});
2つの「div」と3つの「/ div」があります。