2009-09-07 6 views
52

मैं निम्नलिखित है कहते हैं:एक साथ कई तत्वों के लिए एक घटना अटैच किया जा रहा जाना

var a = $("#a"); 
var b = $("#b"); 

//I want to do something as such as the following : 

$(a,b).click(function() {/* */}); // <= does not work 

//instead of attaching the handler to each one separately 

जाहिर है इसके बाद के संस्करण क्योंकि $ समारोह में काम नहीं करता, दूसरा तर्क context, नहीं एक और तत्व है।

तो मैं एक ही समय में दोनों तत्वों को ईवेंट कैसे संलग्न कर सकता हूं?


[अपडेट]

peirix एक दिलचस्प टुकड़ा जिसमें उन्होंने & संकेत के साथ तत्वों को जोड़ती तैनात;

$(a & b).click(function() { /* */ }); // <= works (event is attached to both) 

$(a & b).attr("disabled", true); // <= doesn't work (nothing happens) 

आप ऊपर देख सकते हैं से, जाहिरा तौर पर, & संकेत के साथ संयोजन केवल काम करता है जब घटनाओं संलग्न ...: लेकिन कुछ मैं इस पर ध्यान?

+0

jQuery 1.7 – drogon

+0

क्या नहीं किया था के साथ काम नहीं किया? मेरे प्रश्न में मेरे पास स्निपेट सभी अमान्य हैं। सही के लिए गैरेथ के जवाब पर एक नज़र डालें। –

उत्तर

88

jQuery add method तुम क्या चाहते है:

अधिक तत्वों, यह देखते हुए अभिव्यक्ति से मिलान मिलान किया तत्वों के सेट करने के लिए, जोड़ता है

var a = $("#a"); 
var b = $("#b"); 
var combined = a.add(b) 
+7

1 से अधिक तत्व जोड़ने की इच्छा है इसलिए मैंने var संयुक्त = a.add (बी, सी, डी) किया है यह आपको काम नहीं करता है। जोड़ें (बी) .add (सी) .add (डी) –

8

तुम बस उन्हें एक सरणी में डाल सकता है:

$.each([a, b], function() 
{ 
    this.click(function() { }); 
}); 
+0

ओह, प्रत्येक के साथ वाक्यविन्यास को मिश्रित करें() - अब कोशिश करें – Greg

0

इसे आजमाएं: मीठा और सरल।

var handler = function() { 
    alert('hi!'); 
} 
$.each([a,b], function() { 
    this.click(handler); 
} 

बीटीडब्ल्यू, यह विधि समस्या के लायक नहीं है।

आप पहले से ही पता है कि सिर्फ इन तरीकों में से दो हैं, तो मुझे लगता है कि सबसे अच्छा शर्त

a.click(handler); 
b.click(handler); 

चीयर्स होगा!

2

मैं सिर्फ इस के साथ चारों ओर खिलवाड़ करने की कोशिश की, और कुछ बहुत शांत पाया:

$(a & b).click(function() { /* WORKS! */ }); 

supersweet!

संपादित करें: अब मैं ठीक से परीक्षण नहीं करने के लिए वास्तव में शर्मिंदा हूं। यह क्या हुआ, वास्तव में पर क्लिक ईवेंट को पर रखा गया था ... सुनिश्चित नहीं है कि यह क्यों करता है, हालांकि ...

+0

peirix, मेरी अद्यतन पोस्ट –

+0

@peirix देखें: 'और' संख्याओं पर बिटवाई ऑपरेटिंग के लिए है। –

+0

लेकिन यह स्पष्ट नहीं करता कि पूरे पृष्ठ को क्लिक ईवेंट क्यों मिला? इसे अभी जोड़ा नहीं जाना चाहिए, तो, यह नहीं होना चाहिए? – peirix

38

या तो jQuery चयनकर्ता सीएसएस अल्पविराम वाक्यविन्यास का समर्थन नहीं करते हैं। यदि आपको दो मनमानी संग्रहों को गठबंधन करने की आवश्यकता है, तो हर किसी के सुझाव चिह्न पर हैं, लेकिन यदि आईडी a और b के साथ तत्वों के लिए कुछ करना आसान है, तो $('#a,#b') का उपयोग करें।

+3

हाँ मुझे इसके बारे में पता है, लेकिन मेरी समस्या यह है कि जब वे पहले से ही चर में हैं –

16

यह सवाल पहले से ही उत्तर दिया गया है, लेकिन मुझे लगता है कि एक सरल और अधिक सुव्यवस्थित रास्ता एक ही अंतिम पूरा करने के लिए jQuery के और सीएसएस के चयनकर्ता मॉडल और बस कर के बीच समानताओं पर निर्भर होगा:

$("#a, #b").click(function() {/* */}); 

मैं का उपयोग यह अक्सर, और इसे कभी काम नहीं देखा है (मैं 1.3.2 से पहले jQuery संस्करणों के लिए बात नहीं कर सकता हालांकि यद्यपि मैंने इसका परीक्षण नहीं किया है)। उम्मीद है कि यह किसी दिन किसी की मदद करता है।


अद्यतन: मैं सिर्फ धागा पुन: पढ़ने, और आप पहले से ही टिप्पणी चर के लिए रवाना बचाया प्रश्न में नोड्स होने के बारे में किए गए याद किया, लेकिन इस दृष्टिकोण अभी भी काम करेगा, एक नाबालिग Tweek साथ।

var a = $("#a"); 
var b = $("#b"); 
$(a.selector+", "+b.selector).click(function() {/* */}); 

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

+0

यह दृष्टिकोण दिए गए चयनकर्ता के लिए पूरे डोम-पेड़ को फिर से देखने के लिए jquery बना देगा। यह अतिरिक्त ओवरहेड है। –

4

आप एक सरणी का उपयोग क्यों नहीं करते?

$([item1, item2]).on('click', function() { 
     // your logic 
}); 
+0

यह केवल तभी काम करता है जब आइटम 1 और आइटम 2 डीओएम तत्व हैं जो jQuery ऑब्जेक्ट्स नहीं हैं: http://api.jquery.com/jQuery/#jQuery-elementArray। –

+0

@SteelRat, हम्म .. मैं याद रखने की कोशिश कर रहा हूं कि मैं इसका परीक्षण कर रहा था। लेकिन यह बहुत समय पहले था। तो यदि यह jQuery ऑब्जेक्ट है तो इसे $ ([item1 [0], item2 [0]]) पर क्लिक करना चाहिए। ('क्लिक', फ़ंक्शन() { // आपका तर्क }); –

2

तुम भी एक वर्ग के नाम को बनाने और प्रत्येक तत्व है कि आप उस वर्ग के साथ काम करना चाहते हैं दे सकते हैं: यह मेरी तरफ पर काम करता है। फिर आप उस वर्ग को साझा करने वाले सभी तत्वों को ईवेंट को बाध्य कर सकते हैं।

<p><a class="fakeClass" href="#">Click Me!</a></p> 

<p><a class="fakeClass" href="#">No, Click Me!</a></p> 

<div class="fakeClass">Please, Click Me!</div> 

<script type="text/javascript"> 
    $(function() { 
     $(".fakeClass").on("click", function() { 
      alert("Clicked!"); 
     }); 
    }) 
</script> 
0

उदाहरण:

$("[name=ONE_FIELD_NAME], [name=ANOTHER_FIELD_NAME]").keypress(function(e){alert(e.which);}); 
संबंधित मुद्दे

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