这个问题(大部分)以前已经被问过/回答过了,但我已经尝试了三种方法来阻止事件冒泡,但都没有奏效:
return false;
e.stopPropagation();
e.preventDefault(); (return false应该会处理另外两个,对吗?)
下面是html:
<div class="tags-holder">
<input type="text" class="addField" id="addField_<%= visit.id %>" placeholder="add a new tag">
</div>和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;
}});
我把多余的塞子留在那里了,但真的不应该返回false,简单地杀死冒泡吗?(使用Chrome)。
线索?keyCode=13为Enter
发布于 2011-11-04 03:56:32
哇。你的帮助很大,帮我想通了。
但这个解决方案感觉有点像是逃避;有效,但这种情况从一开始就不应该存在。
这就是我在这里的评论中找到的: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=$('<input type="text">').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;
});发布于 2015-11-04 03:24:48
我也有同样的问题,我使用了上面的方法,它对我很有效。
$(document).unbind('keypress').bind('keypress', function (e) {
// some logic here
});发布于 2011-11-05 15:45:30
尝试先解绑事件,然后再进行绑定,请参考以下代码:
$('.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;
}一个解释是here,我在我的新博客上写了一篇关于这方面的文章。
https://stackoverflow.com/questions/7987454
复制相似问题