2010-04-09 14 views
16

मैं निम्नलिखित कोड है "ऑब्जेक्ट इस गुण या विधि का समर्थन नहीं करता" में indexOf परिणाम:jQuery विभाजन() और

var selected = $('#hiddenField').val().split(","); 
... 
if (selected.indexOf(id) > 0) { 
    ... set value ... 
} 

मैं गतिशील रूप से एक CheckBoxList बना रहा हूं, और के राज्य याद करने की कोशिश कर चयनित आईडी को छिपे हुए क्षेत्र में डालकर चेकबॉक्स।

मुझे यह कहते हुए एक त्रुटि मिलती है कि "ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है"। मेरी धारणा यह है कि चयनित एक सरणी है, जिसे indexOf का समर्थन करना चाहिए। क्या यह गलत है?

+1

बस एक संकेत के रूप में, ये सामान्य ** जावास्क्रिप्ट ** विधियां हैं, वे jQuery विशिष्ट नहीं हैं। –

+0

यदि आप अधिक कोड पोस्ट करना चाहते हैं तो यह शायद मददगार होगा। साथ ही, आपको यह सत्यापित करना चाहिए कि आप जो सोचते हैं * आप उस छिपे हुए क्षेत्र से बाहर निकल रहे हैं वास्तव में इसमें क्या है। – Pointy

+0

@ फ़ेलिक्स: मुझे यकीन नहीं था कि अंतर्निहित विभाजन और jquery विभाजन के बीच कोई अंतर था या नहीं। – chris

उत्तर

21

आपके त्रुटि संदेश के आधार पर, मुझे लगता है कि यह इंटरनेट एक्सप्लोरर से आ रहा है।

आश्चर्य! इंटरनेट एक्सप्लोरर (संस्करण 8 सहित) सरणी के लिए indexOf का समर्थन नहीं करता है।

यहाँ Firefox's implementation है आप का उपयोग कर सकते हैं:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(elt /*, from*/) 
    { 
    var len = this.length >>> 0; 

    var from = Number(arguments[1]) || 0; 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
     from += len; 

    for (; from < len; from++) 
    { 
     if (from in this && 
      this[from] === elt) 
     return from; 
    } 
    return -1; 
    }; 
} 
+1

@ मैट: धन्यवाद। मैंने सोचा कि वे इसे आईई 8 में कार्यान्वित करेंगे, इसलिए गए और एक त्वरित प्रयोग किया, और आईई 7 में इसे देखने के लिए सुखद आश्चर्यचकित था। जैसा कि आप अनुमान लगा सकते हैं, प्रयोग त्रुटिपूर्ण था (मैं प्रोटोटाइप के संदर्भ को हटाने के लिए भूल गया था, जो इसे अनुपलब्ध होने पर आसानी से जोड़ता है)। एक बार फिर धन्यवाद। –

0
[].indexOf || (Array.prototype.indexOf = function(v,n){ 
    n = (n==null)?0:n; var m = this.length; 
    for(var i = n; i < m; i++) 
    if(this[i] == v) 
     return i; 
    return -1; 
}); 
22

indexOf() की कमी दूर करने के लिए एक jQuery विधि नहीं है, आप .inArray() बजाय का उपयोग कर सकते हैं:

var selected = $('#hiddenField').val().split(","); 
if ($.inArray(id, selected) > -1) { 
    ... set value ... 
} 

jQuery.inArray() सिर्फ इस के लिए मौजूद है कारण ... यदि आप पहले से ही jQuery सहित हैं, तो फ़ंक्शन को फिर से लिखने की आवश्यकता नहीं है। नोट: यह वास्तव में एक संख्या देता है, जैसे indexOf() होगा।

+0

+1 सबसे उचित उत्तर प्रतीत होता है :) –

+0

ऐसा लगता है कि इसे काम करना चाहिए, किसी कारण से यह नहीं है: >? line.id >? चयनित {...} [0]: "101" लंबाई: 1 >? $ .inArray (line.id, चयनित) -1 > – chris

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