我写了一段代码:
$('*').on('keyup',function(e){
if(e.keyCode == 13){
$(this).trigger('click');
}
});
上面的代码正常工作,直到jquery对话框。显然,只要我在对话框中按下回车键。这有点像事件的泡沫。
我有2个对话框。第一个是确认对话框,第二个是消息对话框。当我点击是时会弹出消息对话框,当我在消息对话框中点击确定时,确认对话框将再次打开。
我试过这样:
$('*').not('.ui-button').on('keyup',function(e){
if(e.keyCode == 13){
$(this).trigger('click');
}
});
这是为了排除enter事件的ui按钮。那没起效。任何帮助,将不胜感激。感谢
编辑:
请注意,我使用链接调用对话框。我想知道当我点击输入时该链接是否聚焦,所以当我在消息对话框中按Enter键时它再次调用对话框。
答案 0 :(得分:0)
为什么不使用off
取消活动?
$('*').on('keyup',function(e){
if(e.keyCode == 13){
$(this).trigger('click');
}
}).find(".ui-buttons").off('keyup'); // this unbinds the event so it won't trigger
答案 1 :(得分:0)
注册处理程序时可能不会创建ui按钮。
您可以做的一种方法是将单个处理程序注册到文档对象,然后查看实际目标是否为ui-button
$(document).on('keyup', function (e) {
var $target = $(e.target);
if ($target.closest('.ui-button').length) {
return;
}
if (e.keyCode == 13) {
$target.trigger('click');
}
});
答案 2 :(得分:0)
使用此代码,此代码排除.ui-button
元素和.ui-button
类的内部元素
$('body').on('keyup',function(e){
if(!$(e.target).closest('.ui-button').length && e.keyCode == 13){
$(e.target).trigger('click');
}
});
答案 3 :(得分:0)
我承认我不是全球绑定的忠实粉丝,特别是因为这些问题。我发现最好指定我想要将事件绑定到的元素的类型和/或位置。
其中一个原因是这个事件冒泡,在所有浏览器中表现不一样。
我的建议是仅将事件绑定到所需的元素,并将e.stopPropagation()
添加到被调用的函数中。
我知道这不是你要找的答案,但我相信你应该考虑这种方法更具体(更可靠)。
答案 4 :(得分:0)
我通过模糊我点击以打开对话框的链接来解决问题。
类似的东西:
$('.links').find('a').on('click',function(){
$(this).blur();
});