2012-05-19 6 views
6

Tablonun içinde, onay kutusunu işaretlemek/işaretini kaldırmak için kullanıcının tablo satırında herhangi bir yeri tıklamasına izin veren basit bir jQuery işlevi olan bir onay kutularının listesi var. Kullanıcının gerçekten onay kutusunu tıklatması dışında, harika çalışır. O zaman işe yaramıyor. Herhangi bir fikir? İşte benim kodudur:Varsayılan onay kutusu olayının jQuery onay/işaretini kaldır işlevini geçersiz kılmasını nasıl önleyebilirim?

HTML:

<tr onClick="checkBox()">...</tr> 

jQuery: Bu demek zor tarafından bu fonksiyon tetiklenir neden göstererek HTML olmadan

function checkBox() { 

var ischecked = $('input#myContacts').attr("checked"); 

if(ischecked) 
{ 
    $('input#myContacts').attr("checked", false); 
} 
else 
{ 
    $('input#myContacts').attr("checked", true); 
} 

return false; 
} 
+1

"Kişilerim" onay kutusu nerede gösteriliyor? post detaylı html –

+0

@John Anderson: Alexander'ın bir noktası var; Burada birden fazla geçerli çözüm var. Daha fazla açıklamaya ihtiyacınız varsa, lütfen bunu isteyin, aksi halde bir yanıtı kabul edin. – Grezzo

cevap

8

'tıklatma etkinliğinin tr' click tıklaması olayının yayılmasını önlemek için event.stopPropagation'u kullanabilirsiniz. Ayrıca jQuery Events'i kullanmanız gerektiğinde jQuery ve DOM'ı henüz bu şekilde karıştırdığınıza inanamıyorum.

$(document).ready(function(){ 
    $("input#myContacts").click(function(e){ 
    e.stopPropagation(); 
    }); 
}); 
+0

Başka bir çözüm (daha az betik kullanarak), komutun yalnızca etiket tıklatıldığında, onay kutusunu içeren satırın tamamı yerine tetiklenmesini sağlamaktır. – Grezzo

+0

Yardımlarınız için çok teşekkürler! Ben bir jQuery acemiiyim. –

0

. Bir jsFiddle yardımcı olacaktır. Sadece spekülasyon var, ama kontrol kutusunu işaretleyip tıklayabiliyor olsanız da, tıklama olayı hemen kontrol eden bu fonksiyonu çağırıyor mu?

+0

İşlevi html içinden nasıl çağırdığımı göstermek için kodu yeni güncelledim. –

+0

Bana hala en önemli şeyi göstermedin; Onay kutunuz içinde. Eminim budur ve bu senin problemin. Doğru fikre sahip olduğumu kontrol etmek için buraya bakın: http://jsfiddle.net/qmdGK/. Eğer yaparsam, tam olarak yukarıda önerdiğim şey buydu, o tıklıyor, sonra (senaryonuzdan dolayı). Aradığın düzeltmenin türü, bu tıklama etkinliğini, onay kutusunu içeren bir 'un yanındaki bir etiketi içeren 'a bağlamak veya üzerinde tıklama etkinliğini 'a iletmektir. Köpürmeyi önlemek için: http://api.jquery.com/event.stopPropagation/ – Grezzo

+0

Karakterlerin tükendi ... Çözümün jsFiddles'ını yapmaya çalışacağım, ama bir günlüğüne tırmanmak üzere biriyle tanışmak üzereyim. Şu an zamanım yok. Belki bu akşam geri döndüğümde (Birleşik Krallık zamanı) hala bir çözümün yoksa bir şeylerim olabilirdi. – Grezzo

0
<tr class="checkBox">...</tr> 


    $(document).ready(function() { 
     $('tr.checkBox').live('click', function (e) { 
      if (e.target.type !== 'checkbox') { 
       $('input#myContacts').attr("checked", function() { 
        return !$(this).prop('checked'); 
       }); 

       //Or 

       $(this).find('input#myContacts').attr("checked", function() { 
        return !$(this).prop('checked'); 
       }); 
      } 
     }); 
    }); 
0

Çözüm 1: http://jsfiddle.net/qmdGK/3/ (iki tablo hücrelerini kullanarak ama sadece hücreyi metin klik bağlama)

Çözüm 2: http://jsfiddle.net/qmdGK/4/ (onay kutusunu Tıklama etkinliğini stopPropagation() kullanarak)

Her ikisi de, olayı tercih edilen öğeye bağlamak için jQuery kullanıyor.