jqueryを使用して、リスト要素をクリックすると何かが起こるが、そのリスト内の要素(スパンなど)をクリックすると何も変更する必要はないと言うことは可能ですか?
例
<li><span>hello</span></li>
li 要素 => alert("list") をクリックすると、li => alert("hello") 内の span 要素をクリックすると、alert("list") も表示する必要はありません.
jqueryを使用して、リスト要素をクリックすると何かが起こるが、そのリスト内の要素(スパンなど)をクリックすると何も変更する必要はないと言うことは可能ですか?
例
<li><span>hello</span></li>
li 要素 => alert("list") をクリックすると、li => alert("hello") 内の span 要素をクリックすると、alert("list") も表示する必要はありません.
はい、event.target
イベントをトリガーしたノードを確認してください。
$('li').click(function(event){
if (event.target. == event.currentTarget)
// li element triggered
else
// inner elements triggered
});
使用する必要がありますevent.stopPropagation;
http://api.jquery.com/event.stopPropagation/
.live()
(そして jQuery 1.7+ を使用している場合) は、次の.on
ようなメソッドを使用することをお勧めします。
$('ul').on('click','li',function(){
alert('UAAAAAAA! FOOO BARRRRR');
});
$("li").on('click','span',function(event){
event.stopPropagation();
$(this).text('See? No alert dropped! ;)');
});
.on() メソッドは、jQuery オブジェクトで現在選択されている要素のセットにイベント ハンドラーをアタッチします。jQuery 1.7 以降、.on() メソッドは、イベント ハンドラーをアタッチするために必要なすべての機能を提供します。古い jQuery イベント メソッドからの変換については、.bind()、.delegate()、および .live() を参照してください。.on() でバインドされたイベントを削除するには、.off() を参照してください。1 回だけ実行されてから削除されるイベントをアタッチするには、.one() を参照してください。
ライブデモを参照
Red
境界線と内側をクリックします-そのLIST
Bluw
境界線と内側をクリックします-そのHELLO
<ul>
<li>
<span>hello</span>
</li>
</ul>
$('*').click(function() {
if (this.tagName == "LI")
alert("List");
else if (this.tagName == "SPAN")
alert("hello");
return false;
});