2015-08-19 3 views
3

У меня есть большая форма, которую я хочу перемещать, нажав Enter вместо вкладки. У меня есть простой скрипт, который работал нормально, пока я не добавил некоторые отключенные поля в микс. Как я могу пропустить поля, у которых есть атрибут disabled?jquery Найти следующий элемент без атрибута

Я пробовал использовать цикл, но я не могу заставить его пропускать два отключенных поля вместе и сфокусироваться на следующем, поскольку он, кажется, остается на поле перед отключенными.

Если это не так, есть ли способ заменить ключ ввода кода 13 на вкладку? Я попробовал несколько решений здесь, но ни один из них не похож на работу

$('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]), первая выбирает элементы, у которых есть свойство boolean 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();   
    } 
}); 
Смежные вопросы