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

Javascript 如何在if结构中测试输入是否具有焦点?,javascript,jquery,Javascript,Jquery,我这里有这个代码,但是当你点击输入后,当它没有焦点时,警报仍然会出现。如果可能的话,我想取消点击功能,这样它只会在输入有焦点时发出警报 $('#inputSize').click(function(){ if ($('#inputSize').is(':focus')){ $(document).keydown(function(e){ if (e.keyCode == 38) { alert( "up presse

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

$('#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;
            }
        });
    }
});

谢谢

有一个专门针对焦点的处理程序:

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

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

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

$('#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;
            }
        });
    }
});
$('#inputSize').focus(function () {});

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

只需绑定到输入上的
keydown
事件。无需检查焦点,因为这意味着:

$('#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;
            }
        });
    }
});
$('#inputSize').keydown(function(e) {    
    if (e.keyCode == 38) 
    { 
       alert( "up pressed" );
       return false;
    }

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

只需绑定到输入上的
keydown
事件。无需检查焦点,因为这意味着:

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

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

您可以使用以下方法测试它是否是聚焦元素:

  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;
            }
        });
    }
});

您可以使用以下方法测试它是否是聚焦元素:

  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;
            }
        });
    }
});


出于某种原因,在您指定了#inputSize焦点,但单击了其他位置后,仍会触发此操作。是否删除了单击处理程序?也许我误解了你想做什么?当你说“这仍然燃烧”时,你是什么意思?当输入获得焦点时,您希望发生一些事情,对吗?如果有焦点,他们按下键盘上的上/下键,我希望出现相应的警报。哦,我明白了,我会尝试修改我的答案以满足您的要求。出于某种原因,在您给出#inputSize焦点后,仍然会触发此警报,但随后单击了其他位置。是否删除了单击处理程序?也许我误解了你想做什么?当你说“这仍然燃烧”时,你是什么意思?当输入获得焦点时,你希望发生什么事情,对吗?如果有焦点,他们按下键盘上的上/下键,我希望相应的警报出现。哦,我明白了,我会尝试修改我的答案,以满足你的需要,它会发生。我正在演示
is(':focus')
的用法。这很奇怪吗?在
文档
上绑定keydown事件,然后不执行任何操作,除非
#inputSize
具有焦点。正确的方法是将keydown事件绑定到
#inputSize
元素,而不是文档!的确是这样,但“我们不需要解释原因”…;)@阿迪内奥,你说得对。回答吧,但我想现在已经太晚了……:)@阿迪内奥,如果你能让我看看你在说什么,那就太好了。是的,的确如此。我正在演示
is(':focus')
的用法。这很奇怪吗?在
文档
上绑定keydown事件,然后不执行任何操作,除非
#inputSize
具有焦点。正确的方法是将keydown事件绑定到
#inputSize
元素,而不是文档!的确是这样,但“我们不需要解释原因”…;)@阿迪内奥,你说得对。回答吧,但我想现在已经太晚了……:)@adeneo,如果你能告诉我你在说什么,那就太好了。你在click函数中绑定了一个keydown事件,这会多次重新绑定keydown事件,导致问题。您到底想做什么,因为可能不是这样做的。您在单击函数中绑定了一个keydown事件,这将多次重新绑定keydown事件,从而导致问题。你到底想做什么,因为这可能不是你要做的方式。