输入火柴按钮事件两次

这个问题之前已被提及/回答(大多数情况下),但我已经尝试了三件事来阻止事件冒泡但没有任何效果:

return false; e.stopPropagation(); e.preventDefault(); 

(返回false应该照顾其他两个,对吗?)

这是html:

 
<input type="text" class="addField" id="addField_" placeholder="add a new tag">

和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太早写了一行。