2012-02-06 15 views
16

मुझे पूरा यकीन नहीं है कि क्या मैं इसे सही दायरे में या इसका उपयोग नहीं कर रहा हूं, लेकिन मेरे पास एक ऐसी स्क्रिप्ट है जो मूल रूप से एक लिंक क्लिक को कैप्चर करती है और पृष्ठ को लिंक किए गए पृष्ठ पर जाने से पहले बाहर निकलने का कारण बनती है। हालांकि, अगर लिंक एक जावास्क्रिप्ट पर क्लिक करता है, तो स्क्रिप्ट विफल हो जाती है।jQuery: this.attr() फ़ंक्शन नहीं है?

यहाँ मेरी कोड है:

<script type="text/javascript"> 

    pageObj = { 
     init: function(){ 
      $("body").fadeTo("slow", 1); 
     }, 
     redirectPage: function(redirect){ 
      window.location = redirect; 
     }, 
     linkLoad: function(location){ 
      $("body").fadeOut(1000, this.redirectPage(location)); 
     } 
    }; 

    $(document).ready(function() { 
     pageObj.init(); 

     $("a").click(function(e){ 
      e.preventDefault(); 
      if (this.attr('onclick') !== undefined) { 
       eval(this.attr('onclick').val()); 
      } else { 
       var location = this.href; 
       pageObj.linkLoad(location); 
      } 
     }); 
    }); 

</script> 


आप देख सकते हैं, मैं अगर लिंक onclick विशेषता है देखने के लिए एक जांच करने के लिए कोशिश कर रहा हूँ, और फिर onclick फ़ंक्शन को कॉल करें अगर यह मौजूद है। इसे कैसे प्राप्त किया जा सकता है?

उत्तर

4

जबकि Diodeus सही है कि आप attr() उपयोग करने से पहले एक jQuery संग्रह में this रैप करने के लिए की जरूरत है (यह एक jQuery संग्रह करने की एक विधि है, एक HTMLElement की नहीं), तुम बस के रूप में अच्छी तरह से attr() छोड़ सकते हैं।

$("a").click(function(e){ 
    var location; 
    e.preventDefault(); 
    if ($.isFunction(this.onclick)) { 
     this.onclick.call(this, e); 
    } else { 
     location = this.href; 
     pageObj.linkLoad(location); 
    } 
}); 

ध्यान दें कि मैं संपत्ति (जब एक HTML दस्तावेज लोड, गुण आमतौर पर प्रॉपर्टी में, on_______ विशेषताओं तरीके के रूप में पहले से लोड किया जा रहा पहले से लोड कर रहे हैं प्रयोग किया जाता है। यह भी ध्यान रखें कि मैं eval() बजाय this.onclick.call() इस्तेमाल किया, सही this के लिए सेटिंग onclick विधियों, और घटना ऑब्जेक्ट को तर्क के रूप में एक्सेस सुनिश्चित करना।

+0

बहुत बढ़िया। एक आकर्षण की तरह काम करता है। मैं समझता हूं कि कॉल() wo uld eval(), साथ ही, सही से उपयोग करने के लिए सुरक्षित हो? – chaoskreator

55

उपयोग: $(this).attrthis.attr के बजाय

यह jQuery के संदर्भ में यह बाध्य करती है।

+1

मैंने सोचा होगा कि यह काम करेगा, हालांकि, मुझे '$ (यह) .attr (" onclick ") मिलता है। वैल एक फ़ंक्शन नहीं है ' इसका उपयोग कर – chaoskreator

+0

आपको इस मामले में .val() की आवश्यकता नहीं है। –

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