13

次のマークアップがあります

<ol>
    <li class="ListItem">
        <span class="sub">@qItem.CategoryText</span>
        <input type="image" src="http://icons.iconarchive.com/icons/tatice/just-bins/256/bin-red-full-icon.png" width="30" class="deleteIcon" name="QuestionId" value="@qItem.Id" />
    </li>
</ol>

そして次のスクリプト

$(".ListItem").click(function(){
doActionA();
});

$(".deleteIcon").click(function(){
doActionB();
});

画像をクリックすると、ListItem のクリックもトリガーされます。これは、画像が ListItem 内にあるためだと理解しています。しかし、画像がクリックされたときにListItemのクリックが発生しないようにします。それを行う方法はありますか?

4

5 に答える 5

24
$(".deleteIcon").click(function(e){
    doActionB();
    e.stopPropagation();
});
于 2013-01-08T06:28:35.577 に答える
5

イベントがDOMツリーをバブリングしないようにするには、event.stopPropagation()を使用する必要があります。

$(".deleteIcon").click(function(event){
    event.stopPropagation()
    doActionA();    
});

削除アイコンでバインドしたイベントは、ListItem でバインドされた親イベントを起動しているため、子がイベントのソースである場合は親イベントの伝播を停止する必要があります。

于 2013-01-08T06:28:31.527 に答える
1
$(document).on("click", ".deleteIcon", function() {
  doActionB();
});

この方法は、ネストされた要素、特に Pivottable ( https://github.com/nicolaskruchten/pivottable )などのライブラリによって生成された要素で機能することがわかった唯一の方法です。

于 2015-08-05T16:37:15.573 に答える
0

JQuery ドキュメントの指示に従って、.one() を使用します。

于 2013-05-22T06:03:05.843 に答える
0
$(".deleteIcon").click(function(){
    doActionA();
    return false;  
});
于 2013-01-08T06:30:31.010 に答える