2010-09-10 13 views
10

the following code'i düşünün:Bir onay kutusunu tıklatıp '.click()' işlevini çağırmak arasındaki fark nedir?

<input type='checkbox' /> 
<div>Click here</div> 

JS:

$(function() { 
    $('input').click(function() { 
     document.write($(this).is(':checked') ? "checked" : "unckecked"); 
    }); 
    $('div').click(function() { 
     $('input').click(); 
    }); 
}); 

Onay kutusu tıklandığında, çıktı checked olur, ancak "Buraya Tıkla" tıklandığında çıktı unckecked olur . Neden?

+0

Muhtemelen burada sadece bir örnek verdiğinizin farkına varıyorum, ancak bunun gibi bir şey istediğinizden emin olmak için etiket etiketini kullanmalısınız. [Demo] (http://jsfiddle.net/YfJTF/1/) – irishbuzz

+0

@Tom - Bu doğru değil, 'bu' her zaman girişe atıfta bulunuyor, burada test edebilirsiniz: http://jsfiddle.net/nick_craver/ c8Ucr/1/ –

cevap

12

click olayı, öğenin değiştiği change olayından farklı olduğu için. <div>, .click()'u yaptığında, onay kutusunun durumunu henüz değiştirmemiş olan click olayını tetikler; böylece, bunu denetlerken, önceki durumdadır. Eğer <input> doğrudantıkladığınızda

, zaten sırayla change olay yangınlar 2 ana nokta checked durum değişti onay kutularını bile olsa devlet değiştirdik, önce click işleyicisi olan Bunu kontrol etmek için durum geçerli. Bu bir davranış soru değil şansımızı denedik,

$(function() { 
    $('input').change(function() { 
     $("span").append("<br />" + (this.checked ? "Checked" : "Uncecked")); 
    }); 
    $('div').click(function() { 
     $('input').click().change(); 
    }); 
}); 

You can give it a try here ve harici isteyen konum:

böyle doğru durum bilgisi yerine change olay için bakmak ve tetiklemek istiyorum tıklanabilir alan, this is how I'd do it (bir <label> girişi sarma yoluyla).

+0

muhtemelen haklısınız. Yanlış anladım çünkü onun bozuk demosunu tamir etmek yerine, onu nasıl yorumladığımı sordum: -P + 1. –

+0

Çok teşekkürler, Nick! –

+0

@Misha - Hoşgeldin, @Andy - Teşekkürler :) Bence seninki, onu bulmak için başka bir soru sormak, o rotayı araştırmak ... ve onu geri almak için en azından bir +1 alırsın. –

İlgili konular