2012-08-05 81 views
0

我对jQuery(1.7.2)的focusin/focusout事件有问题。当调用.focus()并返回false时,jquery focusin不起作用;

我有一个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/

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

也许是因为我的return false;,所以标签不会切换两次?你有其他解决方案吗?

回答

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");     
    }); 
});​ 
+0

我在一个单独的.js文件中声明的输入。对于某些风格的东西(淡入/淡出),我想在一个单独的位置处理“整个焦点”,从输入声明中尽可能多地取出线条。 但同时它是一个很好的解决方法,在那里添加类。但是从长远来看,无论如何我都需要一个解决方案。 但是,谢谢! – Wulf 2012-08-05 14:28:25

相关问题