替换动态onclick处理程序

时间:2012-03-05 08:33:11

标签: javascript jquery event-handling

我动态插入一些用作按钮的图像并添加onClick事件。

$("img.image_edit_customer").live("click", function() {
    // when clicking the edit image of a row
    $(this).manipulateCustomer("editRowCustomer", {
        scope : "#customer_tbody"
    });
});

稍后我想从用作按钮的图像中删除onClick事件。

$('img[class^="image_edit"]').live('click', function() {
    // do nothing from now on
    alert('edit');
});

现在,它始终执行旧的新处理程序。

更新

如果我正在使用die('click');,我仍然可以执行一次onCLick事件。

4 个答案:

答案 0 :(得分:2)

由于您使用live方法附加事件,因此需要使用die方法

http://api.jquery.com/die/

答案 1 :(得分:1)

对于jQuery 1.7 +

附加仅运行一次然后自行删除的事件:

$(document).one("click", "img.image_edit_customer", function() {
    $(this).manipulateCustomer("editRowCustomer", {
        scope : "#customer_tbody"
    });
});

附加可在以后删除的事件:

$(document).on("click", "img.image_edit_customer", editRow);

删除活动:

$(document).off("click", "img.image_edit_customer", editRow);

附加和删除功能

function editRow(e) {
   $(e.target).manipulateCustomer("editRowCustomer", {
       scope : "#customer_tbody"
   });
}

答案 2 :(得分:0)

由于您使用.live()绑定事件,因此需要使用.die()方法删除事件处理程序:

$('img[class^="image_edit"]').die('click');

<强>通知

从jQuery 1.7开始,建议使用.on().off()方法来附加和取消附加事件处理程序。

答案 3 :(得分:0)

不是为所有匹配元素解除绑定或杀死(也就是死亡)事件,而是使用'marker'类标记各个元素,如下所示:

$("img.image_edit_customer").live("click", function() {
    if(!$(this).hasClass('clicked')) {
       $(this).addClass('clicked');
       $(this).manipulateCustomer("editRowCustomer", {
           scope : "#customer_tbody"
       });
    }
});