Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Для нескольких input одна функция (https://javascript.ru/forum/events/51847-dlya-neskolkikh-input-odna-funkciya.html)

devote 21.11.2014 21:52

Цитата:

Сообщение от klk.pma
Если представленный вариант неправильный, можете показать корректный вариант?

представленный вариант не учитывает сдвиг курсора при вводе данных, а так же конечно кроссбраузерность, например в ИЕ9 нажатие клавиши backspace не вызывает событие oninput. И прочие мелочи, что бы все это учеть нужно намного больше написать. Либо использовать уже существующие решения, например вот этой:
<script type="text/javascript" src="http://devote.github.io/files/letjs/let.js"></script>
<input data-let-input="/^\d+$/" class="digit" type="text" maxlength="8" name="ot" value="">
<input data-let-input="/^\d+$/" class="digit" type="text" maxlength="8" name="do" value="">

devote 21.11.2014 21:55

Цитата:

Сообщение от krutoy
Его смело можно применять, как правило, если место не суперузкое, только с умом.

в том то и дело что его можно и нужно применять там, где без его применения иного способа нет. Я этого не по наслышке а по собственному опыту говорю, когда писал CSS-селектор, именно там производительность играла огромную роль. А использование конструкции for...in мне вставляло камни под колеса.

krutoy 21.11.2014 21:56

Цитата:

Сообщение от devote
сдвиг курсора при вводе данных

А какое он имеет значение?
Цитата:

Сообщение от devote
нажатие клавиши backspace не вызывает событие oninput

И что? по бекспейсу печатается нецифровой символ?

krutoy 21.11.2014 22:00

Цитата:

Сообщение от devote
именно там производительность играла огромную роль

Вот где играет, там и не надо писать. Я об этом уже сказал. Если так параноить над каждой строкой кода, совершенству нет предела, будешь до конца жизни один скрипт оптимизировать. forEach, например, тоже работает ОЧЕНЬ медленно.

devote 21.11.2014 22:01

Цитата:

Сообщение от krutoy
А какое он имеет значение?

курсор ввода, всегда должен оставаться там где его оставил пользователь. А когда меняешь свойство .value у текстового поля, курсор уходит в конец текстового поля. Что не совсем правильно.
Цитата:

Сообщение от krutoy
И что? по бекспейсу печатается нецифровой символ?

Ничего не печатается, а удаляется символ находящийся перед курсором ввода. Но, на это действие ИЕ9 никак не реагирует и не вызывает событие oninput (это просто Баг ИЕ9). Другие события, такие как keypress, keydown и т.д отрабатывают корректно.

krutoy 21.11.2014 22:02

devote,
Кстати, насчет теста я не соврал. В хроме у меня for отработал, в среднем, процентов на 20 быстрей. Видимо, жедезо и ось играет роль.

devote 21.11.2014 22:02

Цитата:

Сообщение от krutoy
forEach, например, тоже работает ОЧЕНЬ медленно.

ну было бы странно если бы он работал быстрее.. Он же на каждую итерацию вызывает функцию, а вызов функции пожирает большие ресурсы.

krutoy 21.11.2014 22:06

Цитата:

Сообщение от devote
Ничего не печатается, а удаляется символ находящийся перед курсором ввода. Но, на это действие ИЕ9 никак не реагирует и не вызывает событие oninput (это просто Баг ИЕ9)

но в данном случае оно и не нужно.

krutoy 21.11.2014 22:09

Цитата:

Сообщение от devote
Другие события, такие как keypress, keydown и т.д отрабатывают корректно.

Я, кстати, протестил события, они работают на порядок медленней oninput в FF и V8. А V8 вообще тормозной при работе с текстовыми полями, я уже который раз замечаю.

krutoy 21.11.2014 22:21

Цитата:

Сообщение от devote
не учитывает сдвиг курсора при вводе данных

А нет ли способа для контроля положения курсора? А то, можно было бы и обработать, (хотя это мелочь, в данном случае, это произойдет только если пользователь сдвинет курсор что-то исправлять и введет при этом нецифровой символ --можно забить на это)


Часовой пояс GMT +3, время: 04:59.