HTML onay kutusunun değerini onclick / onchange olaylarından alma


208
<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" />

İçeriden onClickHandlerve / veya onChangeHandler, onay kutusunun yeni durumunun ne olduğunu nasıl belirleyebilirim?

Yanıtlar:


383

Kısa cevap:

clickDeğer güncelleninceye kadar tetiklenmeyecek ve istediğiniz zaman tetiklenecek etkinliği kullanın :

<label><input type='checkbox' onclick='handleClick(this);'>Checkbox</label>

function handleClick(cb) {
  display("Clicked, new value = " + cb.checked);
}

Canlı örnek | Kaynak

Daha uzun cevap:

changeKadar olay işleyicisi çağrılmaz checkeddevlet güncellendi ( canlı örneği | kaynak ), ancak IE patlamaz (Tim Büthe açıklamalarda işaret ettiği gibi) nedeniyle changeonay kutusu odağı kaybedinceye kadar olay, sen alamadım proaktif bildirim. Daha da kötüsü, IE'yi güncellemek için onay kutusunun (onay kutusunun kendisi yerine) bir etiketine tıklarsanız , eski değeri aldığınız izlenimini edinebilirsiniz (etiketi tıklayarak IE ile deneyin: live example | kaynak ). Bunun nedeni, onay kutusunun odağı varsa, etiketi tıklatmak odağı ondan uzaklaştırır, changeetkinliği eski değerle tetikler ve ardındanclickyeni değeri ayarlar ve odağı onay kutusuna geri getirir. Çok kafa karıştırıcı.

Ancak clickbunun yerine kullanırsanız, tüm bu tatsızlıklardan kaçınabilirsiniz .

DOM0 işleyicilerini ( onxyzöznitelikleri) kullandım, çünkü bu sizin sorduğunuz şeydi, ancak kayıt için genellikle işleyicileri öznitelikleri kullanmak yerine kodda (DOM2'ler addEventListenerveya IE'nin attachEventeski sürümlerinde) takmanızı öneririm onxyz. Bu, aynı öğeye birden çok işleyici eklemenizi ve tüm işleyicilerinizin genel işlevlerini yapmaktan kaçınmanızı sağlar.


Bu cevabın önceki bir sürümü şu kodu kullandı handleClick:

function handleClick(cb) {
  setTimeout(function() {
    display("Clicked, new value = " + cb.checked);
  }, 0);
}

Hedef, değere bakmadan önce tıklamanın tamamlanmasına izin vermek gibiydi. Bildiğim kadarıyla bunu yapmak için hiçbir neden yok ve neden yaptığım hakkında hiçbir fikrim yok. Değer, clickişleyici çağrılmadan önce değiştirilir . Aslında, spesifikasyon bu konuda oldukça açık . Olmadan sürüm setTimeoutdenedim her tarayıcıda (hatta IE6) mükemmel çalışıyor. Sadece değişikliğin olayın sonrasına kadar yapılmadığı başka bir platform düşündüğümü varsayabilirim . Her durumda, bunu HTML onay kutuları ile yapmak için bir neden yoktur.


6
Neyse ki onchangeiçinde doğru çalışıyor +IE9. Kaynak
Mori

Buraya 2 sentimi ekliyorum: IE8 (ve aşağıda, sanırım), bir tıklama ve bir tıklama sürümü arasında ayrım yapıyor gibi görünüyor ve bu sayfada olmamızın nedeni, tıklama yerine tıklamanın tetiklenmesi serbest bırakmak. Onay kutularının yalnızca bir tıklama sürümünde etkinleştirildiği anlaşılıyor - aşağı tıklayıp fareyi hareket ettirmek bir tıklamayı kaydeder, ancak bir onay kutusunu değiştirmez.
dah97765

2
Onay kutusunun klavye gezinmesi ( tab+ space) ile değiştirilmesi, onclickişleyiciyi de tetikler (en azından Chrome 51'de doğrulanmıştır).
Nate Whittaker

Tıklandığında bu onay kutusunun değerini nasıl alabilirim?
user7350714

12

React.js için bunu daha okunabilir kodlarla yapabilirsiniz. Umarım yardımcı olur.

handleCheckboxChange(e) {
  console.log('value of checkbox : ', e.target.checked);
}
render() {
  return <input type="checkbox" onChange={this.handleCheckboxChange.bind(this)} />
}

8

Bunu kullan

<input type="checkbox" onclick="onClickHandler()" id="box" />

<script>
function onClickHandler(){
    var chk=document.getElementById("box").value;

    //use this value

}
</script>
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.