2012-08-05 82 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

相關問題