2015-08-19 57 views
3

我有一個很大的表單,我想通過按回車而不是製表符來瀏覽。我有一個簡單的腳本,工作正常,直到我添加了一些禁用的字段混合。如何跳過具有禁用屬性的字段?jquery查找下一個沒有屬性的元素

我試過使用一個循環,但我無法得到它一起跳過兩個禁用的字段,並專注於下一個,因爲它似乎留在殘疾人之前的領域。

失敗的是,有沒有辦法將13的輸入keyCode替換爲tab?我在這裏嘗試了一些解決方案,但他們都不工作

$('input').on('keydown', function (e) { 
    if (e.keyCode == 13) { 
     e.preventDefault(); 
     $('input')[$('input').index(this)+1].focus(); 
    } 
}); 
+0

什麼用['的.next()'](https://api.jquery.com/next/)? –

+0

不起作用。據我所知,next()只適用於下一個元素,當我需要跳過多個元素時 –

回答

4

您可以使用:enabled selector

$('input').on('keydown', function (e) { 
    if (e.keyCode == 13) { 
     e.preventDefault(); 
     $('input:enabled')[$('input:enabled').index(this)+1].focus(); 
    } 
}); 

JSFiddle

0

您可以只過濾收集並刪除禁用的輸入,並緩存選擇可以節省你三個DOM查找。

請注意,:enabled.not([disabled])之間存在細微差異,前者選擇布爾禁用屬性嚴格等於false的元素,而後者選擇沒有禁用屬性集的元素(不管其值如何) 。

var inputs = $('input'); 

inputs.on('keydown', function (e) { 
    if (e.keyCode === 13) { 
     e.preventDefault(); 

     var enabled = inputs.not('[disabled]'); 

     enabled.eq(enabled.index(this) + 1).focus(); 
    } 
}); 
0
<input /> 
<input /> 
<input disabled="disabled"/> 
<input /> 

$('input').on('keydown', function (e) { 
    if (e.keyCode == 13) { 
     e.preventDefault(); 
     var enabledInput = $('input').not('[disabled]'); 
     enabledInput.eq(enabledInput.index(this) + 1).focus();   
    } 
}); 
相關問題