jQuery

2009-05-02 17 views
6

में लाइव कस्टम इवेंट कैसे बनाएं jQuery में वास्तव में एक आसान कामकाजी घटना है जिसे लाइव() कहा जाता है जो फ्लाई पर डोम तत्वों को ईवेंट जोड़ देगा (यहां तक ​​कि उन तत्वों के लिए भी जिन्हें बाद में डोम में जोड़ा जाएगा)। समस्या यह है कि यह केवल विशिष्ट घटनाओं पर काम कर रहा है (listed here in documentation)।jQuery

मैं वास्तव में फोकस, धुंध और परिवर्तन के लिए लाइव इवेंट्स रखना चाहता हूं जो अभी लाइव द्वारा समर्थित नहीं है। इसके अलावा, अगर मैं लाइव कस्टम इवेंट बना सकता हूं, तो यह मेरे ऐप के लिए बड़ा गेम परिवर्तक होगा। मेरे पास अभी जो कोड है, वह अजाक्स के माध्यम से जोड़े गए नए डोम तत्वों के लिए पुरानी घटनाओं (परिवर्तन, फोकस, और वस्तुओं को खींचने योग्य या आकार बदलने योग्य बनाने के लिए) को पुनर्जीवित करने के लिए समर्पित है।

कोई विचार? मुझे लगता है कि घटना प्रतिनिधिमंडल जाने का रास्ता है, लेकिन मैं अभी कोड को और अधिक जटिल बना दूंगा। शायद एक प्लगइन जो घटना प्रतिनिधिमंडलों को संभालता है ... सुनिश्चित नहीं है। मुझे समाधान खोजने में मदद करें।

उत्तर

5

यह कार्यक्षमता अब jQuery 1.4 में उपलब्ध है। live() अब सभी जावास्क्रिप्ट ईवेंट (कस्टम इवेंट्स सहित) का समर्थन करता है, और focusin और focusout ईवेंट focus और blur के बबलिंग संस्करणों के रूप में पेश किए गए हैं।

jQuery 1.4 documentation on .live() से:

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

5

यदि यह jQuery में नहीं है तो संभवतः एक कारण है। ब्राउज़र कीड़े आदि जो इसे अविश्वसनीय बनाते हैं।

अच्छा downvote लोग: मैं जब तक वे इसे लागू या कि लाइव बन http://docs.jquery.com/Plugins/livequery

संपादित मूल प्लगइन का उपयोग करके देखें इंतजार करेंगे। ऐसा एक कारण है जो यह jQuery में नहीं है और मुझे अत्यधिक संदेह है क्योंकि वे आलसी हैं। मैंने वास्तव में स्रोत पढ़ने में समय बिताया है और क्यों देख रहे हैं कि केवल कुछ घटनाओं को लाइव() में लागू किया गया है और मुझे क्यों नहीं मिल रहा है। तो अगर कोई जानता है ... कृपया हमें प्रबुद्ध करें।

+0

समाधान की तरह लाइवक्वॉरी ध्वनि। इसका जिक्र करने के लिए धन्यवाद। मैं यह देखने के लिए जांच करूँगा कि यह मेरी समस्याओं का समाधान कर सकता है या नहीं। –

+1

.live() और livequery प्लगइन के बीच अंतरों पर एक जानकारीपूर्ण स्रोत। जाहिर है वे विभिन्न तकनीकों का उपयोग कर रहे हैं। http://groups.google.com/group/jquery-en/browse_thread/thread/432a0d9caae734db –

0

मैंने jQuery में .live() फ़ंक्शन के पूरक के रूप में सफलतापूर्वक लाइवक्वायरी प्लगइन का उपयोग किया है। न केवल फोकस, धुंध और परिवर्तन जैसी घटनाओं को बाध्य कर सकता है (जो लाइव() अभी भी 1.3.2 के रूप में समर्थन नहीं करता है) लेकिन यह आपको फ्लाई पर डीओएम तत्वों को कस्टम घटनाओं को बांधने के लिए एक तंत्र प्रदान करता है। उदाहरण के लिए, मैंने इसे कुछ डीओएम तत्वों में ड्रैगगेबल और ड्रॉपपैबल्स को बांधने के लिए उपयोग किया जो अजाक्स के माध्यम से जोड़े जाएंगे। यह मेरे कोड को पढ़ने और बनाए रखने में आसान बनाने के लिए बहुत आसान बनाता है।

+1

आपको शायद लाइवक्विरी का सुझाव देने वाले उत्तर को स्वीकार करना चाहिए। – orip

4

jQuery का live() विधि काम नहीं करेगी क्योंकि फोकस और धुंध घटनाएं अन्य डीओएम घटनाओं की तरह प्रचार नहीं करती हैं (बबल)। अंततः jQuery टीम इस कार्यक्षमता को पेश करेगी लेकिन इसे कृत्रिम (मैन्युअल बबलिंग) होना होगा।

मैं jQuery का उपयोग नहीं किया गया था और अभी भी मुझे लगता है कि यह समर्थित ब्राउज़रों में कब्जा (सबसे गैर IE ब्राउज़र) घटना का प्रयोग करेंगे live() के लाभ चाहता था और IE में मैं उनके onFocusIn/onFocusOut का प्रयोग करेंगे घटनाएं (इन घटनाओं, फोकस/धुंध के विपरीत, बबल करें)।

function onFocus(el, fn) { 
    var outerFn = function(e) { 
     e = e || window.event; 
     if ((e.target || e.srcElement) === el) { 
      fn.call(el); 
     } 
    }; 
    if (document.body.addEventListener) { 
     // This is event capturing: 
     document.body.addEventListener('focus', outerFn, true); 
    } else { 
     // This is event delegation: 
     document.body.attachEvent('onfocusin', outerFn); 
    } 
    return outerFn; 
} 

यह का उपयोग करना::

onFocus(document.getElementById('myInputField'), function(){ 
    log('FOCUSED!!!'); 
}); 

ऐसा ही एक अमूर्त कलंक के लिए इस्तेमाल किया जा सकता और घटनाओं को बदलने

यहाँ एक उदाहरण है।

घटना क्रम (कब्जा/उत्साह से भरा हुआ) के बारे में और अधिक पढ़ें यहाँ: http://www.quirksmode.org/js/events_order.html


यह भी ध्यान देने योग्य बात है कि liveQuery, jQuery प्लगइन, काम करता है क्योंकि इसके लायक हो सकता है नए तत्व के लिए घटना को फिर से बांधता ; यह केवल 'एपेंड', 'insertBefore' जैसी jQuery की DOM मैनिपुलेशन विधियों के साथ काम करता है। इसलिए यदि आप jQuery का उपयोग किए बिना एक नया तत्व जोड़ना चाहते हैं तो यह काम नहीं करेगा।

+0

मैंने याहू में पीपीके की बात देखी, जिसमें उन्होंने विवरण में जावास्क्रिप्ट घटनाओं के बारे में बात की और विभिन्न ब्राउज़र विक्रेताओं में बुलबुले घटनाओं और उनके मतभेदों के बारे में इन सभी मुद्दों का भी उल्लेख किया। बहुत मूल्यवान ... मैं अत्यधिक अनुशंसा करता हूं। http://yuiblog.com/blog/2009/04/27/video-ppk-jsevents/ –

1

आप एरियल फ्लेस्ले की jQuery की जांच कर सकते हैं। लिस्टेन प्लगइन। यह लाइव() घटनाओं और livequery() प्लगइन के समान है, लेकिन यह फोकस() और धुंध() घटनाओं का समर्थन करता है।

http://flesler.blogspot.com/2007/10/jquerylisten.html