javascript - 冲突的事件处理程序 - 如何控制触发哪个处理程序?

标签 javascript jquery events event-handling jquery-events

我的页面上有一个地址列表。每次添加新地址时,我都会执行 Ajax 保存,然后将新地址附加到我的地址列表中。每个地址都位于一个分配有类的 DIV 中,并且我已为该类委托(delegate)了一个单击处理程序,以便当单击地址 div 时,我可以对其执行某些操作。我想要做的是在每个地址 div 中包含一个链接,允许我编辑该特定地址。问题是,当单击链接并为链接调用处理程序时,我还会触发 div 的处理程序。我的问题是:如何处理“编辑”链接点击,而不触发它所在的 div 的点击处理程序?

<div id="addrdiv">
    <div class="customer-shipping-address">
        Name 1
        Addr 1
        <a href='' class='addredit'>Edit This Address</a>
    </div>
    <div class="customer-shipping-address">
        Name 2
        Addr 2
        <a href='' class='addredit'>Edit This Address</a>
    </div>
</div>

因为地址被附加到 addrdiv 中,所以我为每个 div 单击和每个链接单击委托(delegate)了单击处理程序,如下所示:

$("#addrdiv").delegate(".customer-shipping-address", "click", function(e){
    // do things here when someone clicks the address block
    ...
}

$("#addrdiv").delegate(".addredit", "click", function(e){
    // do things here when someone clicks the edit link within the block
    ...
}

当有人单击每个地址中的“编辑”链接时,我希望触发该链接的处理程序,而不是触发整个地址 block 的处理程序。这可以吗?如果是这样,怎么办?

最佳答案

由于我做了一些 fiddle 来证明我的评论是正确的,所以我想我会把它作为答案发布。

您需要调用 stopPropagation 方法,以便事件停止通过 DOM 冒泡 ( fiddle ):

$("#addrdiv").delegate(".customer-shipping-address", "click", function(e){
    // do things here when someone clicks the address block
    ...
}

$("#addrdiv").delegate(".addredit", "click", function(e){
    // do things here when someone clicks the edit link within the block
    e.stopPropagation();
}

关于javascript - 冲突的事件处理程序 - 如何控制触发哪个处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282521/

相关文章:

JQuery 插件结构。带有选项的方法、方法和选项

javascript - ajax.js 或 filename.js 末尾的 ver=3.1.2 是什么意思?ver=3.1.2 是什么意思?

android - 一项 Activity 中不同布局的按钮状态?

javascript - 获取被点击的 li 元素的值

javascript - 无法读取未定义的匹配属性 - 找不到函数

javascript - 如何在重新初始化之前销毁 JQuery 插件实例? (照片刷卡)

javascript - 动态创建的元素上的事件绑定(bind)?

c++ - 解耦两个通知类

javascript - 堆积条形图 : By Type and Quantity

javascript - 刷新后需要一个事件的子菜单(jquery Accordion 菜单)