शुद्ध जावास्क्रिप्ट इनपुट मान परिवर्तन को सुनें


100

क्या कोई ऐसा तरीका है जिससे मैं एक निरंतर फ़ंक्शन बना सकता हूं जो किसी इनपुट को सुनता है, इसलिए जब उस इनपुट मान में परिवर्तन होता है, तो कुछ तुरंत ट्रिगर हो जाता है?

मैं शुद्ध जावास्क्रिप्ट, कोई प्लगइन्स, कोई फ्रेमवर्क का उपयोग करके कुछ ढूंढ रहा हूं और मैं HTML को संपादित नहीं कर सकता।

कुछ, उदाहरण के लिए:

जब मैं इनपुट में मूल्य बदलता हूं MyObject, तो यह फ़ंक्शन चलता है।

कोई मदद?

जवाबों:


135

यह घटनाओं के लिए है।

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

21
यदि जावास्क्रिप्ट द्वारा इनपुट मान को बदल दिया जाता है तो काम नहीं करेगा
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
यदि जावास्क्रिप्ट द्वारा इनपुट सामग्री को बदल दिया जाता है तो काम नहीं करेगा। न तो 'इनपुट' के साथ और न ही 'परिवर्तन' इवेंट के साथ।
इमशोगुन

9
जावास्क्रिप्ट द्वारा मान को बदले जाने पर आप किस घटना को सुन सकते हैं?
जीरो_कूल

3
और जैसा कि दूसरों ने बताया, जब तक आप इनपुट क्षेत्र से बाहर नहीं निकलते, तब तक ट्रिगर नहीं होता है। पुराना उत्तर अब तक, मुझे पता है। लेकिन ये जवाब आश्चर्यजनक रूप से अक्सर सामने आते हैं और वे कभी भी सीमाओं का उल्लेख नहीं करते हैं।
टॉरक्सड

@ImShogun जेएस के माध्यम से इनपुट बदलने पर मामले को "समर्थन" करने के बारे में कोई विचार?
एलेसियो

9

वास्तव में, टिक का उत्तर बिल्कुल सही है, लेकिन उत्तर ES6आकार में हो सकता है :

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

या नीचे लिखा जा सकता है:

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

2

डिफ़ॉल्ट उपयोग

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

लेकिन , यदि आप जेएस के माध्यम से इनपुट वैल्यू मैनुअल को बदलते समय घटना को फायर करना चाहते हैं तो आपको कस्टम इवेंट (किसी भी नाम, जैसे 'myEvent' \ 'ev' आदि) का उपयोग करना चाहिए। यदि आपको फॉर्म 'चेंज' या 'इनपुट' ईवेंट सुनने की जरूरत है और आप जेएस के माध्यम से इनपुट मूल्य बदलते हैं - आप अपने कस्टम इवेंट का नाम बदल सकते हैं '\' इनपुट 'और यह भी काम करेगा।

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

अपने तत्व की पहचान करने और नीचे दिए गए कोड को लिखने के लिए आईडी उपयोग शीर्षक के बजाय।

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

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

op का अनुरोध "शुद्ध जावास्क्रिप्ट" तरीके से किया गया है, जिसका अर्थ है कोई jQuery नहीं - इसलिए
डाउनवोट्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.