У меня есть 5 входов внутри одной ячейки таблицы. 3 ввода типа текста для телефона # части, подключенные к одному скрытому типу ввода "tel". Существует также "select" input для типа телефона. fillNext (id, part, limit) - это функция js, которая заботится о перемещении фокуса в соответствующую часть, как только текущая заполняется. Функция запускается с событием onkeyup. (один раз с "onChange" для автоматически заполняемых случаев). См. входы в ячейки таблицы:
<td>
<span><!-- to invalidate td>label css rule -->
<label> <!-- for font size and vertical-alignment -->
<input name="data[Student][phone_1]" maxlength="3" onkeyup="fillNext("StudentPhone",1,3)" type="text" id="StudentPhone1"> )
<input name="data[Student][phone_2]" maxlength="3" onkeyup="fillNext("StudentPhone",2,3)" type="text" id="StudentPhone2"> -
<input name="data[Student][phone_3]" maxlength="4" onkeyup="fillNext("StudentPhone",3,4)" onchange="fillNext("StudentPhone",3,4)" type="text" id="StudentPhone3">
<select name="data[Student][phone_type]" id="StudentPhoneType">
<option value="Cell Phone" selected="selected">Cell Phone</option>
<option value="Work">Work</option>
<option value="Home">Home</option>
</select>
<input name="data[Student][phone]" style="display:none;" type="tel" id="StudentPhone">
</label>
</span>
</td>
Код работает отлично и, как ожидается, во всех браузерах, кроме FireFox! В FF он отлично работает только тогда, когда вы нажимаете "tab" для перехода к полям. Однако, если вы "нажмете" на любой из видимых входов, в том числе "выберите", фокус автоматически перейдет к первому элементу (id = "StudentPhone1")!
Есть идеи?
Я решил проблему. Оказывается, проблема возникает из-за наличия входных данных в теге "label". (Я сделал это, чтобы воспользоваться некоторыми правилами CSS для ярлыков вместо создания нового!)
Это не имеет никакого отношения к javaScript или событиям.
удаление метки "label" решило ее. Опять же, это странное поведение имеет только Firefox.
У вас есть еще одно решение (возможно, не самое лучшее, извините):
добавьте в <input>
которые имеют событие keyup
второе событие:
onclick=return(false);
Он отменяет действие firefox после нажатия на него ^^