backbone.js - ईवेंट्स, यह जानने के बाद कि क्या क्लिक किया गया था


96

मेरी एक रीढ़ की हड्डी के दृश्य वर्गों में, मेरे पास कुछ इस तरह है:

...

events: {
  'click ul#perpage span' : 'perpage'
},

perpage: function() {
  // Access the text of the span that was clicked here
  // Something like: alert($(element).text())
},

...

क्योंकि मेरे प्रति पृष्ठ मार्कअप में कुछ हो सकता है:

<ul id="perpage">
  <li><span>5</span></li>
  <li><span>10</span></li>
</ul>

तो मैं वास्तव में उस तत्व के बारे में जानकारी कैसे पा सकता हूं जो घटना का कारण बना? या इस उदाहरण में, कि क्लिक किया गया था?

जवाबों:


132

आम तौर पर एक ईवेंट बाइंड पर, आप बस उपयोग करेंगे $(this), लेकिन मुझे पूरा यकीन है कि बैकबोन विचार स्थापित किए गए हैं ताकि thisहमेशा दृश्य देखें, इसलिए यह प्रयास करें:

perpage: function(ev) {
   alert($(ev.target).text());
}

वास्तव में पंक्ति संपादित करें : आप शायद उपयोग करना चाहते हैं $(ev.currentTarget)। नीचे pawlik के उत्तर पर dicussion देखें


1
अगर मैं सही हूं, यह jquery घटनाओं (एक पोस्टर के बारे में पूछा गया) के साथ काम करता है। ध्यान दें कि बैकबोन के ट्रिगर () फ़ंक्शन के माध्यम से शुरू होने वाली घटनाएं इस जानकारी को नहीं लेती हैं (यह आपको ट्रिगर को कॉल करते समय उपयोग किए गए तर्क देता है) ()
जेन्स अल्म

1
@roufamatic - क्योंकि वे वास्तव में मानक जावास्क्रिप्ट घटनाएँ हैं, इसलिए यह BackboneJS के दायरे से बाहर है। उन डॉक्स में HTML और CSS का संदर्भ भी शामिल नहीं है।
स्केले

1
"बैकबोन विचार स्थापित किए जाते हैं ताकि यह हमेशा दृश्य को संदर्भित करता है" - यह केवल उन घटनाओं के साथ delegateEvents([events])या उन eventsऑब्जेक्ट के साथ परिभाषित होता है Backbone.View.extendजो पास हो गए हैं (जो पर्दे के पीछे पूर्व विधि का उपयोग करता है)। यह इनिशियलाइज़र, रेंडर मेथड आदि में बंधी हुई घटनाओं पर लागू नहीं होता है
स्कील

98

ev.targetभ्रामक हो सकता है, आपको http://www.quirksmode.org/js/events_order.htmlev.currentTarget पर वर्णित के रूप में उपयोग करना चाहिए


2
के बारे में पता करने के लिए अच्छा है - लेकिन ऐसा लगता है कि यह IE में लागू नहीं है - या jQuery इसे ठीक करने के लिए सामान्यीकरण नहीं करता है?
जेमी वोंग

2
ऐसा लगता है कि jQuery दोनों ईवेंट को सामान्य बनाता है। ईवेंट को इनिशियलाइज़ करने वाले डोम एलिमेंट के रूप में और ईवेंट को मौजूदा बुलटगार्ट के रूप में ईवेंट bubbling के चरण api.jquery.com/category/events/event/object
mikermcneil

6
मैं सिर्फ इसके साथ खेल रहा था, और स्पष्ट करने के लिए, आप शायद ev.currentTarget चाहते हैं। यह सभी jQuery समर्थित ब्राउज़रों में उपयोग के लिए सामान्यीकृत और सुरक्षित है।
mikermcneil

4
हां, आप लक्ष्य के बजाय करंटगेट का उपयोग करना चाहते हैं। उदाहरण के लिए, यदि आप एक ऐसी कड़ी को बाँधते हैं जिसमें बाल वस्तुएं हैं "<a> <span> पाठ </a>" तो लक्ष्य <span> की ओर इशारा कर सकता है न कि <a>।
इवगेनी

इसका उत्तर होना चाहिए। event.targetकेवल आपको वही मिलता है जो क्लिक किया जाता है।
लोरम

0

आप अपनी इच्छानुसार कोई भी विशेषता प्राप्त कर सकते हैं। ev के रूप में काम करता है this:

perpage: function(ev) {
        console.log($(ev.target).attr('name'));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.