Виявлення зміни значення вводу [type = text] в jQuery


159

Я хочу виконувати функцію щоразу, коли значення конкретного поля введення змінюється. Він майже працює з цим $('input').keyup(function), але нічого не відбувається, наприклад, вставляючи текст у поле. $input.change(function)спрацьовує лише тоді, коли введення розмито, тож як я одразу знаю, коли текстове поле змінює значення?


2
То чому б не пов'язувати keyupі pasteподії, і події?
Ілля Г

devcurry.com/2009/07/… - Виявлення подій вирізання / копіювання / вставки
BeRecursive

2
@ liho1eye paste- це лише те, про що я думав, я б краще слухати остаточну зміну, ніж мусити думати про всі різні вхідні шляхи.
Єрико

@Jeriko Це єдине два способи змінити значення (крім очевидного оновлення через js-код).
Ілія Г

Ви також хочете захопити Ctlr-X ( cut).
Алексіс Вілке

Відповіді:


341

просто повторіть, що функція "ввімкнено" рекомендується за допомогою функції "прив'язувати", тому завжди намагайтеся використовувати прослуховувач подій на зразок цього:

$("#myTextBox").on("change paste keyup", function() {
   alert($(this).val()); 
});

Чому pasteхоч? По-перше, я думав, що це працює, лише якщо ми щось вставимо CTRL+V.
Чорний

3
@ NicolasS.Xu: пряме присвоєння значень не викликає жодної події DOM
Алехандро Сілва

Було б навіть краще, якщо використовувати console.log()замість цього alert. Було б дуже прикро для клавіатури alert.
cytsunny

4
@cytsunny так, оповіщення дратує, але в цьому випадку є прикладом коду, який потрібно виконати при зміні значення, він справді може бути будь-яким корисним навантаженням.
Алехандро Сільва

1
Якщо ви клацніть правою кнопкою миші та вставте, це поверне значення вводу до введення.
1818


15

Спробуйте це .. кредити на https://stackoverflow.com/users/1169519/teemu

для відповіді на моє запитання тут: /programming/24651811/jquery-keyup-doesnt-work-with-keycode-filtering?noredirect=1#comment38213480_24651811

Це рішення допомогло мені просунутися в моєму проекті.

$("#your_textbox").on("input propertychange",function(){

   // Do your thing here.
});

Примітка: зміна властивостей для нижчих версій IE.


6

ви також можете використовувати події з текстовими полями -

<input id="txt1" type="text" onchange="SetDefault($(this).val());" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">

function SetDefault(Text){
  alert(Text);
}

Спробуйте це


5

Спробуйте це:

В основному, лише обліковий запис для кожної події:

Html:

<input id = "textbox" type = "text">

Jquery:

$("#textbox").keyup(function() { 
    alert($(this).val());  
}); 

$("#textbox").change(function() { 
alert($(this).val());  
}); 



0

Використовуйте це: https://github.com/gilamran/JQuery-Plugin-AnyChange

Він обробляє всі способи зміни вводу, включаючи меню вмісту (Використання миші)


Як ти ним користуєшся? Я включаю його у свій HTML і використовую $ ("input"). AnyChange (функція (e) {console.log (e);}); Але він так і не потрапив на лінію console.log
Офер Гал,

0

Це поєднання подій працювало для мене:

$("#myTextBox").on("input paste", function() {
   alert($(this).val()); 
});

0

НЕ ЗАБУДУЙТЕ cutабоselect ПОДІЯ!

Прийнята відповідь майже ідеальна, але вона забуває про cutіselect події події.

cut запускається, коли користувач вирізає текст (CTRL + X або клацніть правою кнопкою миші)

select запускається, коли користувач вибирає запропонований браузером варіант

Ви також повинні додати їх як такі:

$("#myTextBox").on("change paste keyup cut select", function() {
   //Do your function 
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.