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

Javascript 冲突事件处理程序-如何控制触发哪个处理程序?,javascript,jquery,events,javascript-events,event-handling,Javascript,Jquery,Events,Javascript Events,Event Handling,我的页面上有一个地址列表。每次添加新地址时,我都进行Ajax保存,然后将新地址附加到地址列表中。每个地址都位于一个DIV中,并为其分配了一个类,我已经为该类委派了一个click处理程序,以便在单击地址DIV时,我可以对其执行一些操作。我想做的是在每个地址div中包含一个链接,允许我编辑该特定地址。问题是,当单击链接并调用链接的处理程序时,我也会触发div的处理程序。我的问题是:如何处理“编辑”链接单击,而不同时触发它所在的div的单击处理程序 <div id="addrdiv">

我的页面上有一个地址列表。每次添加新地址时,我都进行Ajax保存,然后将新地址附加到地址列表中。每个地址都位于一个DIV中,并为其分配了一个类,我已经为该类委派了一个click处理程序,以便在单击地址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>

当有人单击每个地址中的编辑链接时,我希望该链接的处理程序启动,而不是整个地址块的处理程序启动。这可能吗?如果是,如何操作?

在事件对象中有一个属性“target”,该属性是本例中单击的元素,因此您可以检查event.target==this

使用jQuery.com的示例是:

$("#addrdiv").delegate(".customer-shipping-address", "click", function(e){
    if($(e.target).is(this)) {
        //you can do $(e.target).is(".customer-shipping-address") too
        console.log("clicked element is .customer-shipping-address");
    }
});

在事件对象中有一个属性“target”,该属性是本例中单击的元素,因此您可以检查event.target==this

使用jQuery.com的示例是:

$("#addrdiv").delegate(".customer-shipping-address", "click", function(e){
    if($(e.target).is(this)) {
        //you can do $(e.target).is(".customer-shipping-address") too
        console.log("clicked element is .customer-shipping-address");
    }
});

在事件对象中有一个属性“target”,该属性是本例中单击的元素,因此您可以检查event.target==this

使用jQuery.com的示例是:

$("#addrdiv").delegate(".customer-shipping-address", "click", function(e){
    if($(e.target).is(this)) {
        //you can do $(e.target).is(".customer-shipping-address") too
        console.log("clicked element is .customer-shipping-address");
    }
});

在事件对象中有一个属性“target”,该属性是本例中单击的元素,因此您可以检查event.target==this

使用jQuery.com的示例是:

$("#addrdiv").delegate(".customer-shipping-address", "click", function(e){
    if($(e.target).is(this)) {
        //you can do $(e.target).is(".customer-shipping-address") too
        console.log("clicked element is .customer-shipping-address");
    }
});

您需要将事件附加到链接

$("#addrdiv .customer-shipping-address a").delegate(".addredit", "click", function(e){

}

您需要将事件附加到链接

$("#addrdiv .customer-shipping-address a").delegate(".addredit", "click", function(e){

}

您需要将事件附加到链接

$("#addrdiv .customer-shipping-address a").delegate(".addredit", "click", function(e){

}

您需要将事件附加到链接

$("#addrdiv .customer-shipping-address a").delegate(".addredit", "click", function(e){

}

既然我做了一件事来证明我的评论是正确的,我想我会把它作为一个答案贴出来

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


既然我做了一件事来证明我的评论是正确的,我想我会把它作为一个答案贴出来

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


既然我做了一件事来证明我的评论是正确的,我想我会把它作为一个答案贴出来

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


既然我做了一件事来证明我的评论是正确的,我想我会把它作为一个答案贴出来

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

stopPropagation()是实现这一点的快速方法,只需在事件的
.addredit
处理程序中调用它即可

$("#addrdiv").delegate(".addredit", "click", function (e) {
    e.stopPropagation();
    alert('edit clicked');
});
这里有一个fiddle

stopPropagation()是实现这一点的快速方法,只需在事件的
.addredit
处理程序中调用它即可

$("#addrdiv").delegate(".addredit", "click", function (e) {
    e.stopPropagation();
    alert('edit clicked');
});
这里有一个fiddle

stopPropagation()是实现这一点的快速方法,只需在事件的
.addredit
处理程序中调用它即可

$("#addrdiv").delegate(".addredit", "click", function (e) {
    e.stopPropagation();
    alert('edit clicked');
});
这里有一个fiddle

stopPropagation()是实现这一点的快速方法,只需在事件的
.addredit
处理程序中调用它即可

$("#addrdiv").delegate(".addredit", "click", function (e) {
    e.stopPropagation();
    alert('edit clicked');
});


这是一把小提琴。BOOOOOMit无法停止实时事件的传播。类似地,由.delegate()处理的事件@RubenSerrate@StevenWeb哈哈哈。。。。不,当然是我的错。请阅读此处的文档()。和替补演员的表演。BOOOOOMit无法停止实时事件的传播。类似地,由.delegate()处理的事件@RubenSerrate@StevenWeb哈哈哈。。。。不,当然是我的错。请阅读此处的文档()。和替补演员的表演。BOOOOOMit无法停止实时事件的传播。类似地,由.delegate()处理的事件@RubenSerrate@StevenWeb哈哈哈。。。。不,当然是我的错。请阅读此处的文档()。和替补演员的表演。BOOOOOMit无法停止实时事件的传播。类似地,由.delegate()处理的事件@RubenSerrate@StevenWeb哈哈哈。。。。不,当然是我的错。请阅读此处的文档()。这并不能阻止事件的发生,尽管事实上根本不确定它是否会起作用。addredit不是ayour right的孩子,我想到的是$(“#addrdiv.addredit”)。单击(函数(){e.stopPropagation();});这不会阻止事件冒泡,尽管实际上根本不确定它是否会工作。addredit不是ayour right的孩子,我想到的是$(“#addrdiv.addredit”)。单击(函数(){e.stopPropagation();});这不会阻止事件冒泡,尽管实际上根本不确定它是否会工作。addredit不是ayour right的孩子,我想到的是$(“#addrdiv.addredit”)。单击(函数(){e.stopPropagation();});这不会阻止事件冒泡,尽管实际上根本不确定它是否会工作。addredit不是ayour right的孩子,我想到的是$(“#addrdiv.addredit”)。单击(函数(){e.stopPropagation();});这是有用的-它并没有完全回答我的问题,但我可以看到它的明确用途。谢谢这是有用的-它并没有完全回答我的问题,但我可以看到它的明确用途。谢谢这是有用的-它并没有完全回答我的问题,但我可以看到它的明确用途。谢谢这是有用的-它并没有完全回答我的问题,但我可以看到它的明确用途。谢谢