SORU
17 Aralık 2010, Cuma


Özelliği HTML Checkbox alma değeri değiştiğinde olaylar/

<input type="checkbox" onclick="FuncToCall()" onchange="FuncToCall()" />

onclick onchange sırayla checkbox değeri (yani devlet) değiştirmeden önce ve checkbox.value özelliği her zaman açıktır anlam denir.

Nasıl bir devlet/denetlenmeyen olay bu yaptıklarına bakılırsa belirliyorsunuz?

CEVAP
17 Aralık 2010, Cuma


Kısa cevap:

Değeri güncellendi sonra, istediğiniz zaman yangınlar için: kadar ateş etmiyor click olay, kullanın

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

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

Live example | Source

Uzun cevap:

change olay işleyicisi değil denir kadar checked devlet güncellendi (live example | source), ama çünkü (Tim Büthe işaret olarak yorum) YANİ yok yangın change olaya onay kutusunun odağı kaybettiğinde, anlamıyorsun bildirim proaktif. Sen bir tık daha kötü YANİetiketiçin onay kutusu (checkbox yerine kendisi) için Güncelleştirme, izlenim, o getirdiğine göre, eski değer (TL ile IE buraya tıklayarak etiketi: live example | source). Çünkü eğer bu onay kutusu vardır odak tıklayarak etiketini alır odaklanma, ateş change olay ile eski değer ve click olur ayar yeni değeri ve odak ayarı geri checkbox. Çok kafa karıştırıcı.

Ama eğer click yerine kullanırsanız bu tatsızlık tüm önleyebilirsiniz.

Ben de kullandım DOM0 işleyicileri (onxyz öznitelikleri) çünkü ne olduğunu sordu, ama haberiniz olsun, Ben ki genelde tavsiye çengel işleyicileri kod (DOM2 addEventListener attachEvent eski versiyon YANİ) yerine kullanarak onxyz öznitelikleri. Aynı öğe için birden fazla işleyicileri eklemek ve adamların tüm genel işlevleri yapmaktan kaçınmaya olanak sağlar.


Bu cevap daha önceki bir sürümü handleClick bu kod kullanılır:

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

Amaç ' I tamamlamak için izin vermek için değer bakmadan önce gibiydi. Farkındayım kadarıyla, bunun için bir sebep yok, ve neden yaptığımı hiç bilmiyorum. Değeri click işleyicisi önce değişti. Aslında, spec quite clear about that. setTimeout olmadan sürümü gayet iyi denedim her tarayıcıda (hatta IE6 da çalışır. Sadece biraz düşünüyordum varsayabilirizdiğerolaydan sonra bir değişiklik yapılmadı platform. Her durumda, hiçbir neden HTML kutuları ile yapıyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009