TLDR
- Проверьте это пример в хром.
- Введите someting и нажмите
tab
.покажется одно новое поле - , введите что-нибудь и нажмите
enter
.появляются два новых поля, где ожидается один.
Intro
Я заметил, что при использовании enter
вместо tab
для изменения полей моя функция onchangeна поле ввода стрелял дважды.Эта страница была довольно большой и все еще находилась в разработке (читай: множество других ошибок), поэтому я сделал минимальный пример, демонстрирующий это поведение, и в этом случае он даже делает это на «вкладке».Насколько я могу судить, это проблема только в Chrome .
Что он должен делать
Я хочу сделать новый ввод после того, как что-то введенов поле ввода.Это поле должно получить фокус.
Пример:
javascript - требуется jquery
function myOnChange(context,curNum){
alert('onchange start');
nextNum = curNum+1;
$(context.parentNode).append('<input type="text" onchange="return myOnChange(this,'+nextNum+')" id="prefix_'+nextNum+'" >');
$('#prefix_'+nextNum).focus();
return false;
}
HTML-часть
<div>
<input type="text" onchange="return myOnChange(this,1);" id="prefix_1">
</div>
полный код на вставке .вам нужно добавить свой путь к jquery в скрипте
Рабочий пример приведен здесь на jFiddle
Onchange вызывается дважды: функция myOnChange
вызывается, делает новый ввод, вызывает focus()
, снова вызывается myOnChange
, вводится новый ввод, «внутренний» myOnChange
выходит, а затем «внешний» myOnchange
выходит.
Я предполагаю, что это потому, что изменение фокуса вызывает onchange()
?.Я знаю, что в этом есть разница в поведении браузеров.
Я бы хотел, чтобы .focus () (что кажется проблемой) НЕ вызывало onchange()
, поэтому myOnChange()
не вызывается дважды.Кто-нибудь знает как?