javascriptjquerydomjquery-events

Input Fires Keypress Event Twice


This question has been asked/answered (mostly) before, BUT I've tried three things to stop the event from bubbling but nothing has worked:

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

(return false should take care of the other two, correct?)

Here's the html:

<div class="tags-holder">
    <input type="text" class="addField" id="addField_<%= visit.id %>"  placeholder="add a new tag">
</div>

And the 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;       
   }

});

I left the redundant stoppers in there but really shouldn't return false simply kill the bubbling? (using Chrome).

Clue? keyCode=13 is "Enter"


Solution

  • Wow. Your help was great and helped me think it through.

    BUT the solution feels a bit like a cop-out; effective, but the condition should never be there in the first place.

    Here it is, which I found in the comments from here: 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;       
       });