2012-06-12 26 views
8

फ़ायरफ़ॉक्स और ओपेरा पर जावास्क्रिप्ट में indexOf कॉल का उपयोग कर त्रुटि प्राप्त करना। आईई में ठीक काम करता है।indexOf फ़ायरफ़ॉक्स, ओपेरा में कोई फ़ंक्शन नहीं है लेकिन IE में काम करता है, अनुक्रमणिका स्ट्रिंग का परीक्षण करने के लिए जावास्क्रिप्ट में वैकल्पिक विकल्प है?

कार्रवाई

function anonymous(Grid, Row, Col, Event) { 
    return Grid.ActionShowPopupMenu(); 
} 

घटना के लिए OnRightClick अपवाद के साथ विफल हुआ::

निम्न त्रुटि संदेश है row.id.indexOf एक समारोह

मैं परीक्षण कर रहा हूँ एक स्ट्रिंग है कि नहीं है जावास्क्रिप्ट में एक और स्ट्रिंग और एक स्ट्रिंग के indexOf फ़ंक्शन का उपयोग करना। हालांकि कॉल JQuery कार्यों में किए जा रहे हैं। शायद समस्या का कारण यही है? क्या स्ट्रिंग में कोई अन्य स्ट्रिंग है या नहीं, यह जांचने के लिए जावास्क्रिप्ट में indexOf का उपयोग करने का कोई विकल्प है? क्या इस समस्या के लिए कोई समाधान है?

+2

अनुक्रमणिका से निश्चित रूप से एफएफ में काम करता है। यह सुनिश्चित करने के लिए इसका उपयोग नहीं किया जा रहा है कि यह कितनी देर तक हो सकता है .. यह उस समस्या के साथ हो सकता है जिसे आप इसे कॉल कर रहे हैं। – techfoobar

+0

यदि आप jQuery ऑब्जेक्ट्स पास कर रहे हैं, खासकर यदि 'पंक्ति' एक जेक्यू ऑब्जेक्ट है, तो '.id' अपरिभाषित/शून्य होगा। या तो 'Row.getAttr (' id ') का उपयोग करें। IndexOf() 'या' Row.get (0) .id.indexOf()' का उपयोग करें। यदि यह विफल रहता है, तो भी: 'पंक्ति' आपके फ़ंक्शन घोषणा में पूंजीकृत है, लेकिन अपवाद एक कम मामला' पंक्ति' दिखाता है। जेएस केस सेंसिटिव –

उत्तर

7

String.indexOf सभी ब्राउज़रों में बिल्कुल ठीक है। मैं अपने पंक्ति के आईडी संपत्ति वस्तु है मान नहीं स्ट्रिंग (और न ही सरणी, btw, क्योंकि indexOf भी सरणियों पर (सिवाय IE के लिए) परिभाषित किया गया है)()

+0

हां है, यह समस्या थी। आईडी हमेशा एक स्ट्रिंग नहीं था। सभी टिप्पणियों के लिए धन्यवाद! – user840930

0

indexOf सभी ब्राउज़रों के लिए ठीक है। यह स्ट्रिंग और ऐरे दोनों के लिए डिज़ाइन किया गया है, इसे देखें: http://jsfiddle.net/SquTp/

आपके डोम चयन में कुछ गड़बड़ हो सकती है, या आप इसे गलत तरीके से उपयोग कर सकते हैं।

3

indexOf IE9 से पहले IE के लिए ठीक नहीं है। यदि आप चाहते हैं कि आपका कोड < 9 में काम करे, तो आपको एक सामान्य जेएस फ़ाइल में गैर-अनुपालन वाले ब्राउज़र के लिए विधि को परिभाषित करना चाहिए जिसे प्रत्येक पृष्ठ में छोड़ा जा सकता है। अधिक जानकारी के लिए this thread देखें। कोड Mozilla

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function (searchElement /*, fromIndex */) { 
     "use strict"; 
     if (this == null) { 
      throw new TypeError(); 
     } 
     var t = Object(this); 
     var len = t.length >>> 0; 
     if (len === 0) { 
      return -1; 
     } 
     var n = 0; 
     if (arguments.length > 1) { 
      n = Number(arguments[1]); 
      if (n != n) { // shortcut for verifying if it's NaN 
       n = 0; 
      } else if (n != 0 && n != Infinity && n != -Infinity) { 
       n = (n > 0 || -1) * Math.floor(Math.abs(n)); 
      } 
     } 
     if (n >= len) { 
      return -1; 
     } 
     var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 
     for (; k < len; k++) { 
      if (k in t && t[k] === searchElement) { 
       return k; 
      } 
     } 
     return -1; 
    } 
}