установка tabIndex входов, и я все еще не могу вкладки вообще в ie9

Использование генератора форм ruby ​​on rails для создания множества полей ввода.

Вы можете использовать табуляцию в форме в Chrome/Firefox, но в IE9 табуляция не работает.

Итак, я провел небольшое исследование и решил установить tabIndex входных данных следующим образом:

<script>
$(document).ready(function(){
    var isIE = /*@cc_on!@*/false;
    if(isIE){
        var inputs = document.getElementsByTagName("input");
        for (var i = 0; i < inputs.length; i++){
            inputs[i].setAttribute("tabIndex", ""+i+"");
        }
    }
})
</script>

Во всяком случае, довольно быстрое исправление, я проверил его, и у inputs теперь есть tabIndex, но они все еще не правильно переключаются. Почему это не работает? И есть ли у кого-нибудь лучшее решение?

Редактировать. Сломанная вкладка относится к следующему поведению:

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

Также я знаю, что text-areas и selects не являются входными данными, все, что я пытаюсь сделать на данный момент, это просто заставить работать какие-то функции табуляции. Даже если он пропускает эти элементы.

Ссылка на сайт: прямо здесь откройте в IE9, чтобы увидеть неправильное поведение вкладок. Ссылка на код плагина проверки: здесь


person Ryan    schedule 03.01.2013    source источник
comment
Уточните, пожалуйста, 'неправильное табуляцию'. Имейте в виду, что некоторые элементы ввода не имеют тега input (например, select и textarea).   -  person Halcyon    schedule 03.01.2013
comment
@FritsvanCampen я отредактировал для ясности.   -  person Ryan    schedule 03.01.2013
comment
Есть ли что-нибудь еще, воздействующее на фокус или tabIndex? Может где-то есть элементы с tabIndex?   -  person Halcyon    schedule 03.01.2013
comment
@FritsvanCampen нет, ничто другое не устанавливает tabIndex любых элементов. Они скрыты inputs в верхней части страницы, но у них также есть tabIndex, если вы нажмете на первый видимый input, у него будет tabIndex из 3, поэтому, когда я нажимаю вкладку, он должен просто перейти к следующему индексу, верно? Насколько я могу судить, он даже не фокусируется на скрытом inputs!   -  person Ryan    schedule 03.01.2013
comment
Ваш подход не выглядит правильным - вместо того, чтобы пытаться обойти его, я бы искал источник ошибки. Даже IE6 будет соблюдать порядок табуляции входных данных, проблема, вероятно, в каком-то коде в другом JS или ваш рубиновый генератор генерирует глючную разметку.   -  person Fabrício Matté    schedule 03.01.2013
comment
@FabrícioMatté Ну, я так и думал, но две вещи заставили меня попробовать этот подход, во-первых, при просмотре исходного кода я не могу найти отсутствующие закрывающие теги (конечно, их много, поэтому я могу пропустить один), но во-вторых, вкладки на 100% работают в Chrome/Firefox. Я ожидаю, что сломанная разметка по крайней мере нарушит функциональность вкладок где-нибудь в этих браузерах.   -  person Ryan    schedule 03.01.2013
comment
Да, я также понимаю, что ваш подход должен работать, но пока он не работает, поэтому я предполагаю, что проблема вызвана каким-то скриптом. Было бы намного проще найти исправление/правильное обходное решение, если бы проблему можно было воспроизвести в изолированном тестовом примере, я не очень хорошо разбираюсь в RoR. =]   -  person Fabrício Matté    schedule 03.01.2013
comment
@FabrícioMatté Я только что разместил ссылку на сайт, где вы можете наблюдать за поведением.   -  person Ryan    schedule 03.01.2013
comment
Это не причина вашей проблемы, но вы можете просто использовать: setAttribute("tabIndex", i); вместо объединения переменной i с двумя пустыми строками.   -  person David says reinstate Monica    schedule 03.01.2013
comment
О, я вижу. Напряженный день, извините за поздний ответ. Быстренько посмотрю ссылку. Отладка IE, как обычно, утомительна, но я добавлю, что ошибка также проявляется в моем предварительном просмотре IE10.   -  person Fabrício Matté    schedule 03.01.2013
comment
Если я блокирую ActiveX в IE, табуляция работает, как и ожидалось, но проверка не происходит. Похоже, это связано с вашим сценарием, как я сначала догадался.   -  person Fabrício Matté    schedule 03.01.2013
comment
Весь JS на вашей странице сжат, поэтому его почти невозможно правильно отладить. В нем слишком много сниффинга браузера - около 20 совпадений для msie. jQuery использует некоторые из них, например. настройте переменные $.browser, но большая часть сниффинга браузера, похоже, исходит от плагина. Я бы предложил удалить плагин проверки формы и проверить, как работает вкладка в IE, если это не решит проблему, попробуйте то же самое отключить другие плагины, пока не найдете виновника и не опубликуете его код, чтобы мы могли его просмотреть.   -  person Fabrício Matté    schedule 03.01.2013
comment
@FabrícioMatté Удаление плагина проверки действительно заставило табуляцию снова работать. Я могу опубликовать код для валидатора, но это просто плагин, который работает с twitter bootstrap css для форм. Ну что теперь?   -  person Ryan    schedule 04.01.2013
comment
Откройте вопрос об их проекте GH. =]   -  person Fabrício Matté    schedule 04.01.2013
comment
Нет, подождите, похоже, это проблема с JQuery.tools. Ваш код выглядит нормально, это должна быть проблема с самим плагином.   -  person Fabrício Matté    schedule 04.01.2013
comment
Попробуйте выполнить обновление до последней версии и проверьте, помогает. Не уверен, что вы можете заменить только модуль валидатора, на всякий случай, если вам нужна полная библиотека - cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js   -  person Fabrício Matté    schedule 04.01.2013


Ответы (1)


Возможно, попробуйте вместо этого сделать

inputs[i].tabIndex = i

вместо setAttribute в примере MS здесь: http://msdn.microsoft.com/en-us/library/ie/ms534654(v=vs.85).aspx

person natem345    schedule 03.01.2013
comment
проблема не в том, что tabIndex не устанавливается, а в том. Проблема в том, что, несмотря на то, что входы имеют tabIndex, вы все равно не можете использовать вкладку через них. - person Ryan; 03.01.2013