输入火柴按钮事件两次
这个问题之前已被提及/回答(大多数情况下),但我已经尝试了三件事来阻止事件冒泡但没有任何效果:
return false; e.stopPropagation(); e.preventDefault();
(返回false应该照顾其他两个,对吗?)
这是html:
和JS(更新清理):
$('.addField').show().keyup(function(event){ event.preventDefault(); if(event.keyCode == 13 || event.keyCode==9) { ProfilePage.createTag( this, 'nada', 'addField') $(this).hide().val(''); return false; }
});
我把多余的塞子留在那里,但真的不应该回复假只是杀死冒泡? (使用Chrome)。
线索? keyCode = 13是“Enter”
哇。 你的帮助很棒,帮助我思考。
但解决方案感觉有点像一个警察; 有效,但条件永远不应该在那里。
这是我在这里的评论中找到的:http: //yuji.wordpress.com/2010/02/22/jquery-click-event-fires-twice/
$('.plus').unbind('click').bind('click',function(e){ console.log('clicked') var id=$(this).attr('plus_id'); var field=$('').attr({'placeholder':'add a new tag','id': 'addField_' + id, 'visit_id':id}); field.focus(); field.show().keydown(function(event){ event.stopImmediatePropagation(); if(event.keyCode == 13 || event.keyCode==9) { console.log(event) ProfilePage.createTag( field, 'nada', 'addField') field.hide().val(''); return false; } }).click(function(e){ return false; }) ; $(this).append(field); return false; });
我有同样的问题,我使用上面的方法,它对我有用。
$(document).unbind('keypress').bind('keypress', function (e) { // some logic here });
首先尝试取消绑定事件然后绑定它,请参考下面的代码:
$('.addField').show().unbind('keyup').keyup(function(event){ event.preventDefault(); if(event.keyCode == 13 || event.keyCode==9) { ProfilePage.createTag( this, 'nada', 'addField') $(this).hide().val(''); return false; }
这里有一个解释,我在我的新博客上发了一篇关于此的post。
希望这能解决你的问题。 而不是使用event.preventDefault()使用下面显示的这两个。 如果是Microsoft浏览器,请使用event.cancelBubble = true; 对于W3C模型,浏览器使用event.stopPropagation();
而不是Keyup事件请使用按键事件,因为在按键期间,输入将被发送到输入字段,因此您不希望出现的任何输入将出现在字段上。 因此将触发输入按钮事件。
而不是返回false使用event.returnValue = false。
尝试更改所有实例
$(field).functionCall()
至
field.functionCall()
因为field已经是一个jQuery对象。
好的,现在我们已经确定这不是错误。 我在Firefox 7和Chrome 15中进行了测试,看到if语句中的代码块仅在按下enter时触发一次。 尝试检查以确保createTag()函数中的某些内容没有执行两次。
你认为它在泡沫时会发生什么? 我只用这个测试页面进行一次射击。
Scratch
也许这是你的选择器。 它嵌套在另一个.addTag中吗? 当我更改jQuery选择器并使div和输入相同的类时,我开始得到两个事件触发。 像这样:
$('.thing').show().keyup(...);
…和…
这是一个总是让我疯狂的问题,但我认为这是解决方案只是返回false,如果你返回true它会自动重复它,所以我猜它必须有一个监听器,听取真正的响应。
简答题添加返回false;
$("#register-form #first_name").keyup(function(event) { console.log('hello world'); return false;
});
在原始问题中,如果你仔细看代码似乎返回false太早写了一行。