2011-08-19 14 views
26

क्या jQuery ईवेंट ऑब्जेक्ट में डेटा संलग्न करने का कोई तरीका है क्योंकि यह डोम को प्रचारित करता है?प्रचार के दौरान ईवेंट डेटा संशोधित करें

स्पष्टीकरण के लिए, यदि आपके पास तीन नेस्टेड divs हैं, तो प्रत्येक एक क्लिक इवेंट श्रोता के साथ, फिर सबसे कम से कम div परिणामों पर क्लिक करके सभी तीन हैंडलर को सबसे ऊपर से (बाहरी प्रचार 101) कहा जाता है। मैं जो करना चाहता हूं वह प्रत्येक हैंडलर में ईवेंट ऑब्जेक्ट में कुछ डेटा जोड़ता है जो अगली परत तक पहुंच योग्य है। मैं उसको कैसे करू?

धन्यवाद।

उत्तर

2

शायद मैं सवाल गलत समझा गया है, लेकिन मैं एक ही बात करने के लिए एक रास्ता के लिए खोज, जबकि इस StackOverflow पेज बारे में जाना।

मुझे तब से पता चला है कि आप प्रत्येक हैंडलर के अंत में जिस मूल्य/मान को पास करना चाहते हैं उसे वापस कर सकते हैं और फिर event.result संपत्ति का उपयोग करके बाद वाले हैंडलर में उन्हें एक्सेस कर सकते हैं?

http://api.jquery.com/event.result/

4

यद्यपि आप इस घटना के लिए सीधे डेटा अनुलग्न नहीं कर सकते, तो भी आप targetElement करने के लिए डेटा jQuery के data() के माध्यम से देते हैं सकता है: http://jsfiddle.net/eKVmU/

+0

यह समाधान में सरल डेमो पहली बार घटना के सक्रिय होने पर काम करता है, लेकिन डेटा कई घटनाओं के माध्यम से बनी रहती है (jsfiddle पर, कई बार क्लिक कर कोशिश करते हैं और देखो क्या होता है)। वास्तव में एक विशिष्ट क्लिक के साथ डेटा को जोड़ने का एक तरीका पसंद करेंगे क्योंकि यह एक विशिष्ट तत्व के विपरीत है ... – josh

+0

@josh - जब आप बाहरी तत्व को हिट करते हैं तो आप डेटा को क्यों नहीं हटाते? [यहां देखें] (http://jsfiddle.net/eKVmU/7/)। –

+0

डाउनवॉटेड क्योंकि यह ओपी द्वारा पूछे गए प्रश्न का उत्तर नहीं देता है: "एक jQuery ईवेंट ऑब्जेक्ट में डेटा संलग्न करना"। दूसरा सबसे ज्यादा वोट दिया गया जवाब सिर्फ यही है और स्वीकार्य उत्तर ... –

36

घटना उद्देश्य यह है कि jQuery द्वारा पारित कर दिया है:

$('div').click(function(e) { 
    var info = $(e.target).data('info') || ''; 
    $(e.target).data('info', info + ' ' + $(this).attr('class')); 
}); 

यहाँ बेला है मूल घटना वस्तु के चारों ओर एक रैपर है। बब्बलिंग जावास्क्रिप्ट/ब्राउज़र स्तर पर होता है और इसलिए देशी ईवेंट ऑब्जेक्ट को सभी ईवेंट हैंडलर के बीच साझा किया जाता है।

$('div').click(function(e) { 
    e.originalEvent.attribute = (e.originalEvent.attribute || "") + 
     " " + $(this).prop("className"); 
    alert(e.originalEvent.attribute); 
}); 

क्रोम, फ़ायरफ़ॉक्स, सफारी, आईई 9 और आईई 10 में परीक्षण किया गया। यदि आप अन्य ब्राउज़रों में परीक्षण करते हैं तो कृपया परिणामों के साथ टिप्पणी करें।

यहाँ बेला है: http://jsfiddle.net/5AQqD/

+2

होना चाहिए, मैंने अभी इसे IE10/9 पर परीक्षण किया है और यह काम करता है। यह सही समाधान होना चाहिए। –

+0

बमर, कोई आईई 8 समर्थन नहीं। – johntrepreneur

+0

यह वही है जो मुझे चाहिए, धन्यवाद। यह वास्तव में एमडीएन पर दस्तावेज किया जाना चाहिए। – nils

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