Saf Javascript giriş değeri değişikliğini dinleyin


100

Bir girdiyi dinleyen sabit bir işlev oluşturabilmemin bir yolu var mı, bu yüzden bu girdi değeri değiştiğinde, bir şey hemen tetikleniyor mu?

Saf javascript kullanan bir şey arıyorum, eklenti yok, çerçeve yok ve HTML'yi düzenleyemiyorum.

Bir şey, örneğin:

Girişteki değeri değiştirdiğimde MyObjectbu fonksiyon çalışır.

Herhangi bir yardım?

Yanıtlar:


135

Bu nedir olaylar içindir.

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

21
Giriş değeri javascript tarafından değiştirilirse
çalışmaz

1
Not typeof this.valueolduğunu string. Bir sayı gerekiyorsa, onu parseInt veya parseFloat ile dönüştürün .
Akseli Palén

34

Temel bir örnek olarak ...

HTML:

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

Senaryo:

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

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

İşte bir keman: http://jsfiddle.net/Niffler/514gg4tk/


11
Girdi içeriği javascript tarafından değiştirilirse çalışmaz. ne 'girdi' ne de 'değişiklik' olayıyla.
ImShogun

9
Değer javascript ile değiştirildiğinde hangi olayı dinleyebilirsiniz?
zero_cool

3
Ve diğerlerinin de belirttiği gibi, siz giriş alanından çıkana kadar tetiklenmez. Şimdiye kadar eski cevap, biliyorum. Ancak bu yanıtlar şaşırtıcı şekilde sık sık ortaya çıkıyor ve sınırlamalardan asla bahsetmiyorlar.
Torxed

@ImShogun Giriş JS aracılığıyla değiştirildiğinde durumun nasıl "destekleneceği" konusunda herhangi bir fikriniz var mı?
Alessio

9

Aslında, işaretli cevap tam olarak doğrudur, ancak cevap ES6formda olabilir:

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

Veya aşağıdaki gibi yazılabilir:

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

2

Varsayılan kullanım

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

Ancak , JS aracılığıyla girdilerin değerini manuel olarak değiştirdiğinizde olayı tetiklemek istiyorsanız, özel etkinliği ('myEvent' \ 'ev' gibi herhangi bir ad vb.) Kullanmalısınız. ve JS aracılığıyla girdilerin değerini değiştirirsiniz - özel etkinliğinize 'değiştir' \ 'girdisi' adını verebilirsiniz ve bu da işe yarayacaktır.

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 yerine elementinizi tanımlamak için title kullanın ve kodu aşağıdaki gibi yazın.

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

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

dolayısıyla downvotes - op hiçbir jQuery anlamına gelen "saf javascript" yol, istenen
revelt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.