输入猛击事件两次

bea*_*ear 20 javascript jquery dom javascript-events

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

return false;
e.stopPropagation();
e.preventDefault();  
Run Code Online (Sandbox Code Playgroud)

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

这是html:

<div class="tags-holder">
    <input type="text" class="addField" id="addField_<%= visit.id %>"  placeholder="add a new tag">
</div>
Run Code Online (Sandbox Code Playgroud)

和JS(UPDATE CLEANED UP):

    $('.addField').show().keyup(function(event){
  event.preventDefault();

      if(event.keyCode == 13 || event.keyCode==9) {
    ProfilePage.createTag( this, 'nada', 'addField')
        $(this).hide().val('');

        return false;       
   }
Run Code Online (Sandbox Code Playgroud)

});

我把多余的塞子留在那里,但真的不应该返回假只是杀死冒泡?(使用Chrome).

线索?keyCode = 13是"Enter"

bea*_*ear 11

哇.你的帮助很棒,帮助我思考.

但解决方案感觉有点像一个警察; 有效,但条件永远不应该在那里.

在这里,我在这里的评论中找到了: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;       
   });
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,`event.stopImmediatePropagation();`是让jQuery停止两次调用处理程序的关键. (6认同)

小智 8

我有同样的问题,我使用上面的方法,它适用于我.

$(document).unbind('keypress').bind('keypress', function (e) {
   // some logic here
});
Run Code Online (Sandbox Code Playgroud)


Gho*_*Man 6

首先尝试取消绑定事件然后绑定它,请参考下面的代码:

$('.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;       
}
Run Code Online (Sandbox Code Playgroud)

这里有一个解释,我在我的新博客上发了一篇关于此的帖子.