jQuery one事件阻止触发其他事件

时间:2015-04-29 14:20:08

标签: jquery javascript-events event-handling listener

我不确定我在俯瞰什么。如果我的设计很糟糕,或者有一种聪明的解决方法。

给定: 1个输入字段 1个隐藏按钮

逻辑: 如果输入字段被聚焦,则显示隐藏按钮。 如果输入字段未聚焦,则按钮将被隐藏。 如果单击该按钮,则会调用某个函数,然后该按钮将被隐藏。

问题在于,当单击按钮时,输入字段在之前就不会聚焦,因此非聚焦侦听器会先触发,而按钮点击侦听器永远不会触发。

这是为什么?为什么两个听众都没有被触发?

当前代码结构:

$(someinputfield).focus(function(){
    show button
}
$(someinputfield).focusout(function(){
    hide button
}
$(somebutton).click(function(){
    deliver();
    hide button
}

递送();永远不会被执行!

编辑: 这里是真正的代码:

      $("#input1").focus(function(){
          $("#submit1").delay(600).queue(function(next){
              $(this).css('display', 'block');
              next();
          });
      });
      $("#input1").focusout(function(){
          $("#submit1").hide();
      });
      $("#submit1").click(function(){
          deliver();
          setTimeout(function(){
              $(this).hide();
          }, 2000);
      });

1 个答案:

答案 0 :(得分:1)

使用input代替button按钮。

这样,当您单击按钮时输入将保持焦点,但不在外面。

  

.focus()事件的选择器必须同时包含输入和它的按钮,在下面的示例中,我只选择了所有输入。你需要改变它。

$(function(){

    $('input').focus(function(){
        $('.button').show();
    });

    $('input').blur(function(){
        $('.button').hide();
    });

    $('.button').click(function(){
        alert("clicked");
    });

});

JSFiddle here JSfiddle