如何测试输入是否在if结构中具有焦点?

时间:2013-02-14 15:34:57

标签: javascript jquery

我现在已经有了这个代码,但是当你没有焦点时点击输入后警报仍然会出现。如果可能的话,我也想摆脱点击功能,这样它只会在输入有焦点时发出警告。

$('#inputSize').click(function(){
    if ($('#inputSize').is(':focus')){
        $(document).keydown(function(e){
            if (e.keyCode == 38) { 
               alert( "up pressed" );
               return false;
            }
                if (e.keyCode == 40) { 
               alert( "down pressed" );
               return false;
            }
        });
    }
});

谢谢!

4 个答案:

答案 0 :(得分:2)

只需绑定输入上的keydown事件即可。没有必要检查焦点,因为它隐含着:

$('#inputSize').keydown(function(e) {    
    if (e.keyCode == 38) 
    { 
       alert( "up pressed" );
       return false;
    }

    if (e.keyCode == 40) 
    { 
       alert( "down pressed" );
       return false;
    }
});

答案 1 :(得分:1)

有一个专门用于焦点的处理程序:

$('#inputSize').focus(function () {});

当具有给定ID的输入具有焦点时,这将调用传递的函数。

答案 2 :(得分:0)

您可以使用document.activeElement测试它是否是一个聚焦元素,如下所示:

  if($('#inputSize') == document.activeElement) {
      // #inputsize is focused
    }

请注意,虽然大多数时候你的动作是在另一个元素上触发的,所以如果你单击一个按钮然后它会有焦点而现在是活动元素,所以你不能通过按钮检查来检查它,因为在大多数情况下,当事件被触发时,元素已经被更改。

所以,你可能最终会成为

$('#inputSize').click(function(){

      if($('#inputSize') == document.activeElement){
        $(document).keydown(function(e){
            if (e.keyCode == 38) { 
               alert( "up pressed" );
               return false;
            }
                if (e.keyCode == 40) { 
               alert( "down pressed" );
               return false;
            }
        });
    }
});

答案 3 :(得分:0)

$('#inputSize').keydown(function(e) {
    if (e.keyCode == 38) 
    { 
       alert( "up pressed" );
       return false;
    }
    if (e.keyCode == 40) 
    { 
       alert( "down pressed" );
       return false;
    }
});