2012-05-19 12 views
6

मेरे पास एक साधारण jQuery फ़ंक्शन के साथ तालिका के अंदर चेकबॉक्स की एक सूची है जो उपयोगकर्ता को चेकबॉक्स को चेक/अनचेक करने के लिए तालिका पंक्ति में कहीं भी क्लिक करने की अनुमति देती है। यह बहुत अच्छा काम करता है, सिवाय इसके कि जब उपयोगकर्ता वास्तव में चेकबॉक्स पर क्लिक करता है। यह तब काम नहीं करता है। कोई विचार? यहाँ मेरी कोड है:मैं अपने jQuery चेक/अनचेक फ़ंक्शन को ओवरराइड करने से डिफ़ॉल्ट चेकबॉक्स ईवेंट को कैसे रोकूं?

HTML:

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

jQuery:

function checkBox() { 

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

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

return false; 
} 
+1

'# myContacts' चेकबॉक्स कहां है? विस्तृत एचटीएमएल –

+0

पोस्ट करें @ जॉन एंडरसन: अलेक्जेंडर का एक बिंदु है; यहां एक से अधिक वैध समाधान हैं। यदि आपको और स्पष्टीकरण की आवश्यकता है तो कृपया इसके लिए पूछें, अन्यथा एक उत्तर स्वीकार करें। – Grezzo

उत्तर

8

के क्लिक ईवेंट से बचने के लिए आप event.stopPropagation का उपयोग कर सकते हैं ताकि tr के क्लिक ईवेंट पर प्रचार हो सके। साथ ही, मुझे विश्वास नहीं है कि आप अभी तक jQuery और DOM को मिश्रित कर रहे हैं, जब आपको jQuery ईवेंट का उपयोग करना चाहिए।

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

एक अन्य समाधान (कम स्क्रिप्ट का उपयोग करके) स्क्रिप्ट को केवल तभी खींचना है जब लेबल क्लिक किया गया हो, चेकबॉक्स युक्त पूरी पंक्ति के बजाय। – Grezzo

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! मैं एक jQuery नौसिखिया हूँ। –

0

क्यों कि समारोह में यह कहना कठिन है से शुरू हो रहा दिखा एचटीएमएल के बिना। एक जेएसफ़िल्ड सहायक होगा। बस अटकलें, लेकिन हो सकता है कि आप चेकबॉक्स पर क्लिक करें, जो इसे जांचता है, लेकिन क्लिक इवेंट तुरंत उस फ़ंक्शन को कॉल करता है जो इसे अनचेक करता है?

+0

मैंने कोड को अपडेट किया है यह दिखाने के लिए कि मैं एचटीएमएल के भीतर से फ़ंक्शन को कैसे कॉल करता हूं। –

+0

आपने अभी भी मुझे सबसे महत्वपूर्ण बात नहीं दिखाई है; क्या आपका चेकबॉक्स के भीतर है। मुझे यकीन है कि यह है, और यह आपकी समस्या है। यह देखने के लिए यहां देखें कि मेरे पास सही विचार है या नहीं: http://jsfiddle.net/qmdGK/। यदि मैं करता हूं, तो यह वही है जो मैंने ऊपर सुझाया है, यह टिक रहा है, फिर (आपकी स्क्रिप्ट के कारण) इससे पहले कि आप इसे बदल सकें, अनचाहे हो। जिस प्रकार का फिक्स आप खोज रहे हैं वह पर के बगल में एक लेबल वाला एक लेबल है, जिसमें पर क्लिक ईवेंट पर बुलबुले पर क्लिक करें। बुलबुले को रोकने के लिए: http://api.jquery.com/event.stopPropagation/ – Grezzo

+0

पात्रों से बाहर निकलें ... मैं समाधान के जेएसफिडल्स बनाने की कोशिश करता हूं, लेकिन मैं किसी दिन चढ़ाई के लिए किसी से मिलने जा रहा हूं, इसलिए मैं अभी समय नहीं है। शायद जब मैं इस शाम को वापस ले जाऊंगा (यूके का समय) यदि आपके पास अभी भी कोई समाधान नहीं है तो मुझे जाना होगा। – 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

समाधान 1: http://jsfiddle.net/qmdGK/3/ (दो तालिका कोशिकाओं का उपयोग, लेकिन केवल पाठ को सेल क्लिक बंधन)

समाधान 2: http://jsfiddle.net/qmdGK/4/ (stopPropagation() का उपयोग कर चेकबॉक्स क्लिक करें घटना पर)

दोनों घटना को उस तत्व को बांधने के लिए jQuery का उपयोग कर रहे हैं जिसे प्राथमिकता दी जाती है।

संबंधित मुद्दे