Чистий Javascript прослуховує зміну вхідного значення


100

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

Я шукаю щось, використовуючи чистий javascript, без плагінів, без фреймворків, і я не можу редагувати HTML.

Щось, наприклад:

Коли я змінюю значення на вході MyObject, ця функція запускається.

Будь-яка допомога?

Відповіді:


135

Для цього і потрібні події .

HTMLInputElementObject.addEventListener('input', function (evt) {
    something(this.value);
});

21
Не буде працювати, якщо значення вводу змінюється за допомогою javascript
ImShogun

1
Зверніть увагу, що typeof this.valueце string. Якщо потрібне число, перетворіть його за допомогою parseInt або parseFloat .
Акселі Пален

34

Як основний приклад ...

HTML:

<input type="text" name="Thing" value="" />

Сценарій:

/* event listener */
document.getElementsByName("Thing")[0].addEventListener('change', doThing);

/* function */
function doThing(){
   alert('Horray! Someone wrote "' + this.value + '"!');
}

Ось скрипка: http://jsfiddle.net/Niffler/514gg4tk/


11
Не буде працювати, якщо зміст вводу змінюється javascript. ні з подією "введення", ні "зміною".
ImShogun

9
Яку подію ви можете прослухати, коли значення змінюється за допомогою JavaScript?
zero_cool

3
І, як зазначали інші, не спрацьовує, поки ви не вийдете з поля введення. Я вже знаю стару відповідь. Але ці відповіді з’являються напрочуд часто і в них ніколи не згадується про обмеження.
Torxed

@ImShogun будь-які ідеї щодо того, як "підтримати" випадок, коли вхід змінюється через JS?
Алесіо

9

Насправді, позначена відповідь є абсолютно правильною, але відповідь може бути у ES6формі:

HTMLInputElementObject.oninput = () => {
  console.log('run'); // Do something
}

Або можна написати так:

HTMLInputElementObject.addEventListener('input', (evt) => {
  console.log('run'); // Do something
});

2

Використання за замовчуванням

el.addEventListener('input', function () {
    fn();
});

Але , якщо ви хочете викликати подію, коли ви вручну змінюєте значення входів через JS, ви повинні використовувати спеціальну подію (будь-яке ім'я, наприклад, "myEvent" \ "ev" тощо), ЯКЩО вам потрібно прослухати форми "змінити" або "ввести" подію і ви змінюєте значення входів за допомогою JS - ви можете назвати свою власну подію 'change' \ 'input', і це теж буде працювати.

var event = new Event('input');
el.addEventListener('input', function () { 
  fn();
});
form.addEventListener('input', function () { 
  anotherFn();
});


el.value = 'something';
el.dispatchEvent(input);

https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events


0

Іншим підходом у 2020 році може бути використання document.querySelector():

const myInput = document.querySelector('input[name="exampleInput"]');

myInput.addEventListener("change", (e) => {
  // here we do something
});

1
nit: querySelector - це функція DOM. У цьому немає нічого ES6.
наказ

@customcommander дякую за відгук. Відповідь відредаговано!
Рунсіс

-7

замість ідентифікатора використовуйте заголовок, щоб ідентифікувати ваш елемент і написати код, як показано нижче.

$(document).ready(()=>{

 $("input[title='MyObject']").change(()=>{
        console.log("Field has been changed...")
    })  
});

op запитав "чистий javascript" спосіб, що означає відсутність jQuery - отже, голоси проти
revelt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.