2014-05-07 6 views
15

से पहले तत्व होने की जाँच करने की आवश्यकता है मैं निम्नलिखित कोड है:इस JQuery कोड बदलने के लिए प्रसंस्करण

  <script type="text/javascript"> 
      $(function() { 
       $('#js-news').ticker({ 
        speed: 0.10, 
        htmlFeed: false, 
        fadeInSpeed: 600, 
        titleText: 'DASHBOARD ALERTS', 
        direction: 'ltr', 
        displayType: 'reveal', 
        controls: false 
       }); 
      }); 
     </script> 

मैं परिवर्तन करने के लिए यह इस तरह है कि यह केवल आग अगर # js-खबर मौजूद है चाहते हैं। पुराने आईई वी 10 ब्राउज़र में मुझे त्रुटि मिल रही है: "तत्व डीओएम में मौजूद नहीं है", और प्रासंगिक पृष्ठों में जेएस-न्यूज तत्व नहीं है। नया ब्राउज़र सामना करना प्रतीत होता है, लेकिन IE7,8,9 नहीं।

कोड परिवर्तन पर विचारों की सराहना की।

धन्यवाद।

+2

'टिकर' लिखा गया है कि आईडी गैर-मौजूदा तत्वों पर काम करती है? O_O – Bergi

+0

आप किस 'टिकर' प्लगइन का उपयोग करते हैं? कृपया इसे लिंक करें! – Bergi

+1

विजेट मानना ​​सही ढंग से लिखा गया है। – Barmar

उत्तर

7

सबसे पहले, के रूप में @Archer ऊपर टिप्पणी में कहा, इस प्लगइन ठीक से कोडित नहीं है। बेवकूफ jQuery प्लगइन चुपचाप विफल हो जाएगा जब इसकी विधि किसी jQuery ऑब्जेक्ट पर कोई तत्व नहीं है।

यहाँ कोड से देखा है, इस प्लगइन या तो console.log() या एक alert() अगर console चलाता है जब वहाँ कोई तत्व है मौजूद नहीं है के रूप में:

if ($(this).length == 0) { 
    if (window.console && window.console.log) { 
     window.console.log('Element does not exist in DOM!'); 
    } else { 
     alert('Element does not exist in DOM!');  
    } 
    return false; 
} 

यह बहुत बुरा है। प्लगइन में debugMode है जिसे अक्षम किया जा सकता है, लेकिन इससे मदद नहीं मिलेगी क्योंकि उस ध्वज का उपयोग यहां नहीं किया जाता है। स्रोत को संशोधित करने के लिए, आप ऊपर पहली पंक्ति को बदल सकता है:

if (opts.debugMode && $(this).length == 0) { 

और फिर अपनी सेटिंग्स में debugMode:false सेट करना सुनिश्चित करें।

-

लेकिन कैसे यह अंततः आईई प्रभावित करता है यह एक console वस्तु परिभाषित जब देव उपकरण (IE6/7 में और कभी नहीं) बंद हो जाती हैं नहीं है, तो एक सरल उपाय होगा यह सुनिश्चित करने के लिए कि ऑब्जेक्ट को नो-ओपी फ़ंक्शन के साथ परिभाषित किया गया है।

if (!window.console) { 
    window.console = { 
     log: function() {} 
    }; 
} 

अब यह console खोजने के लिए और alert() फायरिंग के बजाय IE में खाली समारोह आह्वान करेंगे।

console उद्देश्य यह है कि शायद बहुत में भरा जाना चाहिए पर अन्य तरीकों हैं, लेकिन log() सबसे आम है।


आप इच्छुक हैं तो, तो यह एक बुरा विचार डेवलपर के साथ एक बग रिपोर्ट फ़ाइल करने के लिए नहीं हो सकता। ऐसा लगता है कि परियोजना को पिछले 2 सालों में अपडेट नहीं किया गया है, इसलिए मुझे नहीं पता कि इससे मदद मिलेगी, लेकिन इससे चोट नहीं पहुंची।

+0

क्या एक आश्चर्यजनक जवाब है। सबसे उपयोगी। धन्यवाद। – SamJolly

+0

आपका स्वागत है। –

5

लंबाई की जांच करने के लिए शर्त जोड़ें:

if($('#js-news').length){ 
    $('#js-news').ticker({ 
       speed: 0.10, 
       htmlFeed: false, 
       fadeInSpeed: 600, 
       titleText: 'DASHBOARD ALERTS', 
       direction: 'ltr', 
       displayType: 'reveal', 
       controls: false 
    }); 
} 
+6

मेरे लिए समझ में नहीं आता है। यदि इस 'ऑब्जेक्ट में कोई तत्व नहीं चुना गया है तो उचित रूप से लिखित jQuery प्लगइन कुछ भी नहीं करेगा। – VisioN

+1

प्लगइन की तरह दिखता है कि उस भाग को सही ढंग से संभाल नहीं रहा है। –

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