У меня есть элемент ввода, и я хочу продолжать проверять длину содержимого, и всякий раз, когда длина становится равной определенному размеру, я хочу включить кнопку отправки, но я столкнулся с проблемой с событием onchange Javascript в качестве события срабатывает только тогда, когда элемент ввода выходит за пределы области видимости, а не при изменении содержимого.
<input type="text" id="name" onchange="checkLength(this.value)" />
---- onchange не срабатывает при изменении содержимого имени, а только срабатывает, когда имя выходит из фокуса.
Могу ли я что-то сделать, чтобы это мероприятие работало над изменением содержания? или какое-то другое мероприятие, которое я могу использовать для этого? Я нашел обходной путь с помощью функции onkeyup, но она не срабатывает, когда мы выбираем некоторый контент из автозаполнения браузера.
Я хочу что-то, что может работать, когда содержимое поля изменяется с помощью клавиатуры или мыши ... какие-нибудь идеи?
источник
onkeyup
иonchange
?Ответы:
(function () { var oldVal; $('#name').on('change textInput input', function () { var val = this.value; if (val !== oldVal) { oldVal = val; checkLength(val); } }); }());
Это будет поймать
change
, нажатие клавиш,paste
,textInput
,input
(при наличии). И не стрелять больше, чем нужно.http://jsfiddle.net/katspaugh/xqeDj/
Рекомендации:
textInput
- тип события W3C DOM Level 3. http://www.w3.org/TR/DOM-Level-3-Events/#events-texteventsinput
- тип события HTML5 .Firefox, Chrome, IE9 и другие современные браузеры поддерживают его.
источник
textInput
Chrome 15, и он работает. Я проверилinput
событие в IE9, и он тоже работает. Firefox должен поддерживатьDOMAttrModified
, но у меня он не установлен. Эти два события - лучшее, на что вы можете надеяться, поскольку они запускаются при вводе любого текста.change
,keyup
иinput
была лучшая комбинация для покрытия IE9 и Firefox (36.0.4).keypress
Событие , похоже , не на работу в IE9 , потому что это не захватить вещи , как Удалять и Backspace, а такжеinput
события чехлов оклейки с клавиатурой и с помощью контекстного меню.В качестве дополнения к ответу Катспо, вот способ сделать это для нескольких элементов с помощью класса css.
$('.myclass').each(function(){ $(this).attr('oldval',$(this).val()); }); $('.myclass').on('change keypress paste focus textInput input',function(){ var val = $(this).val(); if(val != $(this).attr('oldval') ){ $(this).attr('oldval',val); checkLength($(this).val()); } });
источник
Мне потребовалось 30 минут, чтобы найти его, но он работает в июне 2019 года.
<input type="text" id="myInput" oninput="myFunction()">
и если вы хотите программно добавить прослушиватель событий в js
inputElement.addEventListener("input", event => {})
источник
Сделайте это способом jQuery:
<input type="text" id="name" name="name"/> $('#name').keyup(function() { alert('Content length has changed to: '+$(this).val().length); });
источник
Вы можете использовать onkeyup
<input id="name" onkeyup="checkLength(this.value)" />
источник
Вам придется использовать комбинацию
onkeyup
иonclick
(илиonmouseup
), если вы хотите уловить любую возможность.<input id="name" onkeyup="checkLength(this.value)" onmouseup="checkLength(this.value)" />
источник
setTimeout
периодически проверять значение поля ... Что именно вы хотите сделать?Вот еще одно решение, которое я разрабатываю для той же проблемы. Однако я использую много полей ввода, поэтому я сохраняю старое значение как определяемый пользователем атрибут самого элемента: «значение-данные». Используя jQuery, им так легко управлять.
$(document).delegate('.filterBox', 'keyup', { self: this }, function (e) { var self = e.data.self; if (e.keyCode == 13) { e.preventDefault(); $(this).attr('data-value', $(this).val()); self.filterBy(this, true) } else if (e.keyCode == 27) { $(this).val(''); $(this).attr('data-value', ''); self.filterBy(this, true) } else { if ($(this).attr('data-value') != $(this).val()) { $(this).attr('data-value', $(this).val()); self.filterBy(this); } } });
вот, я использовал 5-6 полей ввода с классом filterBox, я заставляю метод filterBy запускаться только в том случае, если значение данных отличается от его собственного значения.
источник