我的代码中有两个听众,第一个是文档中属性为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
答案 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');