Javascript thuần túy lắng nghe sự thay đổi giá trị đầu vào


97

Có cách nào để tôi có thể tạo một hàm hằng lắng nghe đầu vào, để khi giá trị đầu vào đó thay đổi, điều gì đó sẽ được kích hoạt ngay lập tức không?

Tôi đang tìm kiếm thứ gì đó sử dụng javascript thuần túy, không có plugin, không có khuôn khổ và tôi không thể chỉnh sửa HTML.

Một cái gì đó, ví dụ:

Khi tôi thay đổi giá trị trong đầu vào MyObject, chức năng này sẽ chạy.

Bất kỳ giúp đỡ?

Câu trả lời:


130

Đây là những gì các sự kiện dành cho.

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

21
Sẽ không hoạt động nếu giá trị đầu vào được thay đổi bởi javascript
ImShogun

1
Lưu ý rằng typeof this.valuestring. Nếu cần một số, hãy chuyển đổi nó bằng parseInt hoặc parseFloat .
Akseli Palén

34

Như một ví dụ cơ bản ...

HTML:

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

Kịch bản:

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

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

Đây là một trò chơi: http://jsfiddle.net/Niffler/514gg4tk/


11
Sẽ không hoạt động nếu nội dung đầu vào bị thay đổi bởi javascript. cả với sự kiện 'input' cũng như 'change'.
ImShogun

9
Bạn có thể lắng nghe sự kiện nào khi giá trị bị thay đổi bởi javascript?
zero_cool

3
Và như những người khác đã chỉ ra, không kích hoạt cho đến khi bạn thoát khỏi trường nhập. Câu trả lời cũ của bây giờ, tôi biết. Nhưng những câu trả lời này xuất hiện thường xuyên một cách đáng ngạc nhiên và chúng không bao giờ đề cập đến những hạn chế.
Torxed

8

Trên thực tế, câu trả lời được đánh dấu là chính xác, nhưng câu trả lời có thể ở ES6dạng:

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

Hoặc có thể viết như dưới đây:

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

2

Sử dụng mặc định

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

Tuy nhiên , nếu bạn muốn kích hoạt sự kiện khi bạn thay đổi giá trị đầu vào theo cách thủ công qua JS, bạn nên sử dụng sự kiện tùy chỉnh (bất kỳ tên nào, như 'myEvent' \ 'ev', v.v.) NẾU bạn cần nghe biểu mẫu 'thay đổi' hoặc sự kiện 'đầu vào' và bạn thay đổi giá trị đầu vào thông qua JS - bạn có thể đặt tên cho sự kiện tùy chỉnh của mình là 'change' \ 'input' và nó cũng sẽ hoạt động.

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


-7

thay vì id sử dụng tiêu đề để xác định phần tử của bạn và viết mã như bên dưới.

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

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

op đã yêu cầu theo cách "thuần javascript", nghĩa là không có jQuery - do đó số
phiếu phản đối
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.