2009-12-04 18 views
5

के साथ ठीक से काम नहीं कर रहा है, मैं एक पृष्ठ पर कई एएसपीनेट चेकबॉक्स का उपयोग करने की कोशिश कर रहा हूं, उन्हें तदनुसार अक्षम कर रहा हूं।चेकबॉक्स IE के लिए jquery

<asp:CheckBox ID='chkMenuItem' runat='server' CssClass='HiddenText' Text='Test'  onclick='<%#String.Format("checkChild({0});", Eval("id")) %>' /> 

जावास्क्रिप्ट पर, मैं निम्नलिखित कोड

function checkChild(id) { 
      for (i = 0; i < $("input[id*=hdnParentMenuItemID]").length; i++) { 
       if ($('input[id*=hdnParentMenuItemID]')[i].value.split(':')[0] == id) { 
        var childID = $('input[id*=hdnParentMenuItemID]')[i].value.split(':')[1]; 
        if ($("#" + childID).attr("disabled")) 
        //$("#" + childID).attr('disabled', ''); 
         $("#" + childID).removeAttr("disabled"); 
        else 
         $("#" + childID).attr('disabled', true); 
       } 
      } 
     } 

उपयोग कर रहा हूँ अब चेक बॉक्स विकलांग एक बार पृष्ठ लोड होने पर removeAttr अनुभाग काम नहीं करता हो रहा है। मैंने डीबगर के माध्यम से कदम उठाने की कोशिश की और तर्क पूरी तरह से ठीक काम करता है। यदि पेज लोड पर चेकबॉक्स अक्षम नहीं हैं, तो कोड ठीक काम करता है। मैंने अक्षम किए गए 'विशेषताओं' को 'चेक' के साथ बदलने की कोशिश की ताकि यह देखने के लिए कि अन्य विशेषताएँ ठीक काम करती हैं और यह पूरी तरह से ठीक काम करती है। मैंने

$("#" + childID).attr('disabled', ''); 

लेकिन यह भी काम नहीं किया।

नोट: यह एफएफ और क्रोम पर सही काम करता है लेकिन आईई में काम नहीं करता है।

धन्यवाद,

+0

कृपया http://www.artzstudio.com/2009/04/jquery-performance-rules/#cache-jquery-objects साफ करने के लिए देख अपने पाश के लिए। इस स्क्रिप्ट को करके मैं आपकी स्क्रिप्ट को अनावश्यक रूप से धीमा कर रहा हूं I <$ ("इनपुट [id * = hdnParentMenuItemID]") लंबाई। एक स्थानीय चर में $ ("इनपुट [आईडी * = hdnParentMenuItemID]") डालें और लंबाई की संपत्ति को स्थानीय चर में भी रखें। – nickytonline

उत्तर

12

मैं jQuery का उपयोग कर इंटरनेट एक्सप्लोरर में एक <asp:CheckBox /> सक्रिय करने के समान समस्या थी। निम्नलिखित कोड फ़ायरफ़ॉक्स में पूरी तरह से ठीक काम किया।

$('myCheckBox').removeAttr('disabled'); 

हालांकि, यह आईई में ठीक से काम करने में विफल रहा।

एक <asp:CheckBox /> एक <input /> के साथ एक <span /> और एक <label /> टैग के रूप में प्रदान की गई है। जब चेकबॉक्स अक्षम होता है तो दोनों अवधि और इनपुट टैग अक्षम विशेषता के साथ सजाए जाते हैं। अपेक्षित व्यवहार मैं निम्नलिखित कोड के लिए इस्तेमाल किया पाने के लिए:

$('myCheckBox').removeAttr('disabled'); 
$('myCheckBox').closest('span').removeAttr('disabled'); 
+0

समाधान के लिए धन्यवाद! मैं इस व्यवहार के लिए आईई में वास्तव में चिंतित था, जब तक मुझे पता नहीं चला कि वे स्पैन टैग पर अक्षम विशेषता क्यों रखते हैं, क्योंकि यह अधिक स्पष्ट करता है कि चेकबॉक्स अक्षम है यदि उसके साथ पाठ ग्रे-आउट भी है। – Jagd

+0

बहुत बहुत धन्यवाद। यह मुझे हमेशा के लिए ले गया। – Richard77

+0

मैं अपने बालों को खींच रहा था। धन्यवाद। –

0

यह परिभाषित करना चाहिए। काम

$('#' + childID)[0].disabled = false; 
+0

यह काम नहीं करेगा। जब तक अक्षम विस्तारित संपत्ति का मूल्य होता है या अक्षम विशेषता का मान होता है, तो यह अक्षम रहेगा। जैसे <इनपुट प्रकार = "बटन" अक्षम = "झूठा" मान = "मैं अभी भी अक्षम हूं">। आपको अक्षमता विशेषता को हटाने की आवश्यकता है। जोएल पॉटर का जवाब देखें। – nickytonline

+0

'$ ('#' + childID) [0]' वास्तविक डीओएम तत्व का संदर्भ है, है ना? यदि ऐसा है, तो 'अक्षम' संपत्ति सेट करना निश्चित रूप से काम करेगा।विशेषता के लिए कुछ भी करने की ज़रूरत नहीं है। –

+0

@ टिम डाउन: यह वास्तव में है। @nickyt: जावास्क्रिप्ट इस तरह से 'अक्षम' और 'चेक' जैसी गुणों को संभालता है। गुण और उनके मान HTML विशेषताओं के लिए एक सरल 1: 1 मैपिंग नहीं हैं। –

0

आप चाहते हैं एक अगर बयान की तरह इस

if ($("#" + childID + ":disabled").length) // is childID disabled? 
    $("#" + childID).removeAttr("disabled"); // enable it 
else 
    $("#" + childID).attr('disabled', 'disabled'); // disable it 
0

अनावश्यक चयनकर्ताओं यहाँ है कि इस समारोह बहुत अक्षम बनाने जा रहे हैं का भार कर रहे हैं। सबसे पहले, चयनकर्ताओं के लिए चल रहे प्रश्न शेष कोड के सापेक्ष बहुत धीमे हैं, इसलिए अपने चयनकर्ता के परिणाम को कैश करें और उस पर काम करें। साथ ही, आपको i को var ऑपरेटर के साथ अपने फ़ंक्शन में स्थानीय बनाने के लिए घोषित करना चाहिए। और इसके आईडी द्वारा तत्व प्राप्त करने के लिए jQuery की आवश्यकता नहीं है या उस ग़लत रूप से भ्रमित करने वाली सामग्री को अपनी अक्षम स्थिति प्राप्त करने और सेट करने की आवश्यकता नहीं है, जिसे बूलियन DOM disabled संपत्ति के साथ कहीं अधिक आसानी से किया जा सकता है। जो कुछ भी कहा, मैं वास्तव में नहीं जानता कि आपका कोड क्यों काम नहीं कर रहा है, लेकिन इसे पठनीय और सरल बनाने में निश्चित रूप से मदद मिलेगी।

function checkChild(id) { 
    var input, checkBox, parts, inputs = $("input[id*=hdnParentMenuItemID]"); 
    for (var i = 0, len = inputs.length; i < len; i++) { 
     input = inputs[i]; 
     parts = input.value.split(':'); 
     if (parts[0] == id) { 
      checkBox = document.getElementById(parts[1]); 
      checkBox.disabled = !checkBox.disabled; 
     } 
    } 
} 
+0

मुझे लगता है कि आपका मतलब है 'इनपुट = इनपुट [i] ' – Joel

+0

वास्तव में मैं करता हूं, धन्यवाद। फिक्स्ड। –

+0

$ (...) का उपयोग नहीं करेगा। प्रत्येक (...) लूप के मुकाबले क्लीनर हो? –