2011-02-09 19 views
7
<input class="jProblemClass" id="Checkbox{%= ID %}" type="checkbox" onchange="problemPicker.onChangeProblemCheckBox('{%=ID %}');"/> 

पहले जांच या अनचेक करने के बाद कुछ भी नहीं होता है। Afetr दूसरा क्लिक करें, मेरे फ़ंक्शन problemPicker.onChangeProblemCheckBox पर कॉल करें, लेकिन मुझे आईडी पहले चेक मिलती है। क्यूं कर? मुझे किसी की मदद कर सकते हैं?एचटीएमएल चेकबॉक्स नॉर्मिंग काम नहीं कर रहा है

onChangeProblemCheckBox: function(id) { 
    if ($('#CheckBox' + id).attr("checked") == true) { 
     problemPicker.addToCheckProblems(id); 

     var checkboxes = $('.jProblemClass:checked'); 

     if ((checkboxes.length > general.limit) && (general.limit != 0)) { 
      alert('The limit of ' + general.limit + ' problems exceeded. Please deselect ' + (checkboxes.length - general.limit).toString() + '.'); 
     } 
    } else { 
     problemPicker.delFromCheckProblems(id); 
    } 
}, 
+1

आप हमें यह दिखाना चाहते हैं कि फ़ंक्शन क्या करता है - शायद समस्या है ... – Rob

उत्तर

19

भाई ऑनक्लिक ईवेंट का उपयोग बजाय onchange .. कारण ... जावास्क्रिप्ट संदर्भ मैं पढ़ा है के अनुसार, फोकस के बाद onchange आग खो दिया है। जब तक आप कहीं और क्लिक नहीं करते हैं, तो आईई में फोकस खो नहीं जाता है। अन्य ब्राउज़रों को फायरिंग ऑनचेंज से पहले फोकस खोने की प्रतीक्षा नहीं करनी चाहिए - जो सुझाव देते हैं कि वे सही ढंग से (उस बिंदु पर आग लगने के बावजूद सही ढंग से spec का पालन नहीं कर रहे हैं) का पालन नहीं कर रहे हैं। इसके बजाय ऑनक्लिक और ऑनकीडाउन/ऑनकीप का उपयोग करने के बारे में (ऑनक्लिक और ऑनकीप/ऑनकीडाउन का उपयोग करके आप चेकबॉक्स दोनों के माउस और कीबोर्ड सेटिंग को कवर करते हैं)। संदर्भ: http://www.winvistatips.com/re-onchange-event-checkbox-not-working-properly-t311364.html

0

मुझे लगता है कि समस्या यहां से है: $('#CheckBox' + id).attr("checked") == true। एचटीएमएल चश्मा के अनुसार, checked को इस घटना को आग लगने पर "checked" पर सेट किया जाना चाहिए। तो, $('#CheckBox' + id).attr("checked") == "checked" या यहां तक ​​कि $('#CheckBox' + id).attr("checked") जैसे कुछ का उपयोग करने का प्रयास करें।

दूसरे विकल्प के रूप में, मैं आपको अपने दिनचर्या को चलाने के लिए शुद्ध jquery का उपयोग करने की सलाह देता हूं। उदाहरण के लिए, यदि आप <input type="checkbox" id="ac"> चेकबॉक्स है, तो आप इस JQ कोड अपने दिनचर्या को संभालने के लिए उपयोग कर सकते हैं:

$(document).ready(function() { 
    $("input[type=checkbox]").change(function() { 
     alert("Am i checked? - " + $(this).attr("checked") + "\nMy ID:" + $(this).attr("id")); 
    }); 
}); 

इस मामले this demo में दिखाया गया है।

+0

'ऑनक्लिक' पर ईवेंट 'एक्सचेंज' बदलने के बाद सभी काम कर रहे हैं। लेकिन अगर मैं कुछ भी काम नहीं करता हूं। – isxaker

+0

फिर यह हो सकता है कि ऑनबर्नल ऑनब्लूर आग तक आग न करे, बॉक्स को चेक करने के बाद किसी अन्य तत्व पर फ़ोकस सेट करने का प्रयास करें। –

+0

अब मैं ऐसा करने की कोशिश करता हूं। – isxaker

0

इसके बजाय if($('#CheckBox' + id + ':checked').length > 0) का उपयोग करने का प्रयास करें, इस तरह आपने jQuery को यह पता लगाया कि चेकबॉक्स checked है या नहीं। के रूप में घटना तत्व है, problemPicker के संदर्भ में सक्रिय होंगे

यह भी असफल हो जायेगी onChangeProblemCheckBoxproblemPicker में किसी भी आंतरिक गुण का उपयोग करता है लेकिन, पूर्ण पथ के साथ उन्हें referens नहीं है यानी problemPicker.nnnnn है। ऐसा होगा जैसे फ़ंक्शन को $('#CheckBox' + id).onChangeProblemCheckBox() कहा जाता था।

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