Javascript บริสุทธิ์ฟังการเปลี่ยนแปลงค่าอินพุต


99

มีวิธีใดบ้างที่ฉันสามารถสร้างฟังก์ชันคงที่ที่รับฟังอินพุตได้ดังนั้นเมื่อค่าอินพุตเปลี่ยนไปบางสิ่งจะถูกทริกเกอร์ทันที

ฉันกำลังมองหาบางอย่างโดยใช้จาวาสคริปต์ล้วนๆไม่มีปลั๊กอินไม่มีกรอบและฉันไม่สามารถแก้ไข HTML ได้

ตัวอย่างเช่น:

เมื่อฉันเปลี่ยนค่าในอินพุตMyObjectฟังก์ชันนี้จะทำงาน

ความช่วยเหลือใด ๆ

คำตอบ:


134

นี่คือเหตุการณ์ที่มีไว้สำหรับ

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

21
จะไม่ทำงานหากค่าอินพุตถูกเปลี่ยนแปลงโดย javascript
ImShogun

1
โปรดทราบว่าเป็นtypeof this.value stringถ้าเป็นจำนวนจำเป็นต้องแปลงด้วยparseIntหรือparseFloat
Akseli Palén

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 ไม่มีเหตุการณ์ 'input' หรือ 'change'
ImShogun

9
คุณสามารถฟังเหตุการณ์ใดได้บ้างเมื่อค่าถูกเปลี่ยนโดยจาวาสคริปต์
zero_cool

3
และตามที่คนอื่น ๆ ชี้ไว้อย่าทริกเกอร์จนกว่าคุณจะออกจากช่องป้อนข้อมูลเช่นกัน คำตอบเก่าตอนนี้ฉันรู้แล้ว แต่คำตอบเหล่านี้มักปรากฏขึ้นอย่างน่าประหลาดใจและไม่เคยพูดถึงข้อ จำกัด
Torxed

@ImShogun มีความคิดอย่างไรในการ "สนับสนุน" กรณีที่มีการเปลี่ยนแปลงอินพุตผ่าน JS?
Alessio

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


-7

แทนที่จะใช้ id ใช้ชื่อเพื่อระบุองค์ประกอบของคุณและเขียนโค้ดดังต่อไปนี้

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

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

op ขอวิธี "javascript บริสุทธิ์" ซึ่งหมายความว่าไม่มี jQuery - ด้วยเหตุนี้การ
โหวตลดลง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.