调用.focus()并返回false时,jquery focusin不起作用;

时间:2012-08-05 14:02:00

标签: javascript jquery focus

我对jQuery(1.7.2)的focusin / focusout事件有疑问。

我在div中有2个输入。当其中一个获得焦点时,我想在div中添加一个类。如果没有任何输入具有焦点,我只想删除这个类。


$(function() {
  $('#container').on('focusin',function(){
    $(this).addClass('test');
  }).on('focusout',function(){
    if ($(this).find('input:focus').length) return;
    $(this).removeClass('test');
  });

  $('#container input').on('keydown',function(e) {
    var keycode = e.keyCode || e.which;
    //When Tab or Return, switch input
    if (keycode == 9 || keycode == 13) {
      $($(this).attr('data-target')).focus();
      return false;
    }
  });
});

<div id="container">
    <input type="text" id="a" data-target="#b">
    <input type="text" id="b" data-target="#a">
</div>

http://jsfiddle.net/pqUFX/

工作正常,当我用鼠标点击输入切换焦点时。但是,当通过调用keydown()将焦点设置到输入的$('#b').focus();事件内的其他输入时,即使检查div中的现有焦点,该类也会被删除。

可能是因为我的return false;,所以标签不会切换两次?你有替代解决方案吗?

1 个答案:

答案 0 :(得分:1)

不确定为什么它不能正常工作(应该),但为什么不使用这样的东西:

$(function() {
    $('#container input').on('keydown',function(e) {
        var keycode = e.keyCode || e.which;
        //When Tab or Return, switch input
        if (keycode == 9 || keycode == 13) {             
            $($(this).attr('data-target')).focus();
            $(this).parent().addClass("test");
            return false;
        }
    }).focusin(function() {
        $(this).parent().addClass("test");                  
    }).focusout(function() {
        $(this).parent().removeClass("test");                  
    });
});​