2010-07-07 12 views
8

मैं jQuery टूल्स टूलटिप प्लगइन का उपयोग कर रहा हूं, जिसे $('selector').tooltip() के साथ प्रारंभ किया गया है। मैं इसे किसी भी मौजूदा या भविष्य .tooltipper तत्व पर कॉल करना चाहता हूं। मैंने सोचा कि निम्नलिखित काम करेगा:jQuery तैयार या लोड ईवेंट के साथ लाइव

$('.tooltipper').live('ready', function(){ 
    $(this).tooltip() 
} 

लेकिन यह असफल रहा --- तैयार घटना आग नहीं आई। लोड के लिए वही। मैंने पढ़ा है कि लाइवक्वायरी मैं जिस परिणाम की तलाश कर रहा हूं उसका परिणाम उत्पन्न कर सकता हूं, लेकिन निश्चित रूप से यह देखने के लिए jQuery .live() का उपयोग करने का एक तरीका है, दस्तावेज़ों का कहना है कि यह सभी jQuery घटनाओं के लिए काम करता है, जिनमें से मेरा मानना ​​है कि ready है एक।

+0

यदि तत्व तैयार पर मौजूद है, तो '.live()' का उपयोग क्यों करें? मुझे लगता है कि आप शायद उस घटना को बांधने की कोशिश कर रहे हैं जो संभावित रूप से नए 'चयनकर्ता' बनाएगा। सीधे जवाब नहीं है लेकिन यह 'तैयार' पर '.live()' का उपयोग करने के लिए एक शॉटगन दृष्टिकोण की तरह लगता है। बस मेरा $ .02। – HurnsMobile

+0

मुझे इस तरह से लगता है। कुछ तत्वों को हमेशा कुछ व्यवहार प्रदर्शित करना चाहिए। उदाहरण के लिए, क्लिक किए जाने पर 'href' विशेषता वाले लिंक हमेशा आपको URL पर ले जाना चाहिए। 'शीर्षक' विशेषता वाले अधिकांश तत्वों को पैरामीटर को माउस ओवर पर टूलटिप के रूप में प्रदर्शित करना चाहिए। कस्टम टूलटिपिंग जैसे उच्च-आदेश व्यवहारों के लिए इस प्रकार की कार्यक्षमता को सक्षम करने के लिए यह केवल मुझे समझ में आता है। –

+1

मैं बस '$ ('टूलटिपर') का उपयोग कर समाप्त हुआ। Livequery (function() {$ (this) .tooltip()}) ', जो मुझे सबसे अर्थपूर्ण समझ बनाता है (जैसा कि अगले सबसे अच्छे समाधान के विपरीत है, जो कि टूलटिप तत्व बनाता है जो फ़ंक्शन में कॉलबैक जोड़ना है) जिसमें टूलटिप व्यवहार तत्व से जुड़ा हुआ है --- इसके द्वारा बनाई गई प्रक्रिया के साथ इसका कोई लेना-देना नहीं है। –

उत्तर

12

jQ एपीआई (http://api.jquery.com/live/) से उद्धरित:

jQuery 1.3.x केवल निम्न JavaScript घटनाओं (कस्टम घटनाओं के अतिरिक्त) में से बंधे किया जा सकता है .live(): क्लिक करें, dblclick, keydown , कीप्रेस, कीप, mousedown, mousemove, माउसआउट, माउसओवर, और माउसअप।

jQuery 1.4 के रूप में .live() विधि कस्टम घटनाओं के साथ-साथ सभी जावास्क्रिप्ट ईवेंट का समर्थन करता है।

jQuery 1.4.1 के रूप में भी लाइव के साथ फोकस और धुंधला काम (अधिक उपयुक्त, बुलबुले, घटनाओं फोकस और फोकसआउट के लिए मैपिंग)।

jQuery 1.4.1 के रूप में होवर ईवेंट निर्दिष्ट किया जा सकता है ("माउसेंटर माउसलीव" पर मैपिंग)।

.live() तैयार घटना का समर्थन करने के लिए प्रतीत नहीं होता है।

5

हर्नमोबाइल के उत्कृष्ट उत्तर में जोड़ने के लिए; bindReady() को देखते हुए, जो आंतरिक कॉल कि jQuery दस्तावेज़ लोड घटना के लिए हर बार जब आप $(some_function) या $(document).ready(some_function) फोन हम देखते हैं कि हम क्यों "ready" करने के लिए बाध्य नहीं कर सकते बाध्य करने के लिए बनाता है:

bindReady: function() { 
     if (readyBound) { 
      return; 
     } 

     readyBound = true; 

     // Catch cases where $(document).ready() is called after the 
     // browser event has already occurred. 
     if (document.readyState === "complete") { 
      return jQuery.ready(); 
     } 

     // Mozilla, Opera and webkit nightlies currently support this event 
     if (document.addEventListener) { 
      // Use the handy event callback 
      document.addEventListener("DOMContentLoaded", DOMContentLoaded, false); 

      // A fallback to window.onload, that will always work 
      window.addEventListener("load", jQuery.ready, false); 

     // If IE event model is used 
     } else if (document.attachEvent) { 
      // ensure firing before onload, 
      // maybe late but safe also for iframes 
      document.attachEvent("onreadystatechange", DOMContentLoaded); 

      // A fallback to window.onload, that will always work 
      window.attachEvent("onload", jQuery.ready); 

      // If IE and not a frame 
      // continually check to see if the document is ready 
      var toplevel = false; 

      try { 
       toplevel = window.frameElement == null; 
      } catch(e) { //and silently drop any errors 
        } 
        // If the document supports the scroll check and we're not in a frame:  
      if (document.documentElement.doScroll && toplevel) { 
       doScrollCheck(); 
      } 
     } 
    } 

यह कुल मिलाकर, $(some_function) कॉल एक समारोह जो बांधता के लिए:

  • DOMContentLoaded
  • onreadystatechange (DOMContentLoaded)
  • window.load/ऑनलोड

आपका सबसे अच्छा शर्त उन कार्यों कि नई .tooltipper तत्वों बना सकता है, बल्कि (जो केवल एक बार होता) तैयार घटना के लिए सुनने के लिए कोशिश कर रहा से करने के लिए बाध्य होगा।

+0

बढ़िया! अतिरिक्त विवरण शॉन के लिए धन्यवाद! – HurnsMobile

+0

विचार-विमर्श के उत्तर के लिए धन्यवाद। मैंने jQuery टूल को आपके तरीके से 'कन्स्ट्रक्टर' पर कॉल किया है, लेकिन पूछताछ की इस पंक्ति का विचार पूरी तरह से ऐसा करने से बचने का प्रयास करना है। इसके पीछे मेरा तर्क यह है कि टूलटिप की टूलटिपिशन के टूलटाइप के निर्माण के साथ कुछ भी नहीं है, और टूलटिप में आंतरिक रूप से आंतरिक है। –

1

हर्नस्मोबाइल सही है। JQuery लाइव तैयार घटना का समर्थन नहीं करता है।

यही कारण है कि मैंने एक प्लगइन बनाया जो दोनों को जोड़ता है। आप एक बार अपनी कॉलबैक पंजीकृत करते हैं, और उसके बाद आपको मैन्युअल रूप से जोड़े जाने वाली सामग्री के लिए प्लगइन को कॉल करने की आवश्यकता होगी।

$.liveReady('.tooltipper', function(){ 
    this.tooltip() 
}); 

फिर नए सामग्री तैयार करते समय:

element.html(somehtml); 
element.liveReady(); 

या

$('<div class="tooltipper">...').appendTo($('body')).liveReady(); 

एक डेमो यहाँ उपलब्ध है: http://cdn.bitbucket.org/larscorneliussen/jquery.liveready/downloads/demo.html

परिचयात्मक पोस्ट चेक आउट यहाँ: http://startbigthinksmall.wordpress.com/2011/04/20/announcing-jquery-live-ready-1-0-release/


इसके अलावा http://docs.jquery.com/Plugins/livequery पर एक नज़र है, जो डोम पर परिवर्तन के लिए listenes है।

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