在不删除委托的情况下关闭事件

时间:2018-05-29 18:22:11

标签: jquery html bind

我的代码中有两个听众,第一个是文档中属性为data-listen-enter的所有元素,我使用$(document).delegate所以新元素也会听这个事件

$(document).delegate('[data-listen-enter]', 'keyup', function (e) {
    if (e.keyCode === 13)
        $($(this).data('listen-enter')).trigger('click');
});

第二个是在我打开“dinamic confirm”功能之后,所以当它显示时我会按Enter键确认或取消

$(document).on('keyup', function(e){
    if (e.keyCode === 13)
        $myConfirm.find('.myConfirm-confirm').trigger('click');
});

因此,当我点击确认或取消时,它会删除事件

$(document).off('keyup');

但它也删除了第一个使用属性data-listen-enter

监听所有元素的事件

2 个答案:

答案 0 :(得分:1)

根据jQuery docs,您可以通过提供处理函数来指定要更精细地删除哪些事件。为此,您需要将函数指定为变量。

var keyUpFunc = function(e) {
    if (e.keyCode === 13)
        $myConfirm.find('.myConfirm-confirm').trigger('click');
};

$(document).on('keyup', keyUpFunc);

//this should just remove the one event...
$(document).off('keyup', keyUpFunc);

未经测试,但请试一试。

答案 1 :(得分:0)

我在jQuery中发现了event.namespace

我可以为我的活动命名,所以我可以指定一个我要删除的exaclty女巫

在文档中使用data-listen-enter属性的所有元素

$(document).delegate('[data-listen-enter]', 'keyup.listenEnter', function (e) {
    if (e.keyCode === 13)
        $($(this).data('listen-enter')).trigger('click');
});

我的“dinamic确认”

$(document).on('keyup.myConfirm', function(e){
    if (e.keyCode === 13)
        $myConfirm.find('.myConfirm-confirm').trigger('click');
});

因此,当我点击确认或取消时,它会从我的dinamic确认中删除该事件

$(document).off('keyup.myConfirm');