我对jQuery(1.7.2)的focusin/focusout事件有问题。
我在一个div中有两个输入。当其中一个获得焦点时,我想在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;
,所以标签不会切换两次吗?对此,你有其他解决方案吗?
不确定为什么它不能真正工作(它应该),但为什么不使用这样的东西:
$(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");
});
});