2013-07-03 28 views
5

रीफ्रेश करें मेरे पास कुछ जावास्क्रिप्ट है जो मुझे अपने काम के लिए विरासत में मिला है। इस जावास्क्रिप्ट में हमारे पास एक साइड बार है जो लगातार अद्यतन होता है (प्रत्येक 1 - 10 या इतने मिनट)। स्क्रिप्ट में हम सर्वर से AJAX को पार्स और संसाधित करते हैं और फिर हम एक रोचक फ़ंक्शन कहते हैं।जावास्क्रिप्ट ईवेंट श्रोता

function renewClicks(){ 
    $('.classElem').unbind('click'); 
    $('.classElem2').unbind('click'); 
    $('.classElem3').unbind('click'); 

    $('.classElem').click(elm1funct); 
    $('.classElem2').clikc(elm2funct); 
    $('.classElem3').click(elm3funct); 
} 

कहां .classElem एक सीएसएस क्लास चयनकर्ता है जो पृष्ठ में जोड़े गए प्रत्येक छवि में संलग्न है। और elmfunct एक ऐसा फ़ंक्शन है जो क्लिक को संभालने के लिए लिखा गया है। यह प्रत्येक अद्यतन पर चलता है (वैध पहले से जोड़े गए तत्वों को प्राधिकृत करना और फिर उन्हें सभी जोड़ना)। मैं जानना चाहता हूं कि क्या कोई तरीका है कि मैं संभावित रूप से डोम में बॉडी एलिमेंट पर श्रोता संलग्न कर सकता हूं ताकि पेज में सभी छवि तत्व जोड़े जाए और सीएसएस वर्ग के उत्तराधिकारी को पहले ही संभाला जा सके और इसलिए अपंजीकृत और पुनः- प्रत्येक अद्यतन पर पंजीकृत है।

आपके द्वारा प्रदान की जा सकने वाली किसी भी जानकारी के लिए धन्यवाद।

+2

आपको इसे संभालने के लिए jQuery की 'ऑन' विधि के साथ प्रतिनिधिमंडल का उपयोग करना चाहिए, ताकि आपको इन क्लिकों को अनबाइंडिंग/रीबंड करने की आवश्यकता न हो। अपना एचटीएमएल कोड देखने के बिना, आपको और बताना मुश्किल होगा। – crush

उत्तर

8

आप इस कोशिश कर सकते:

$('body').on('click','.classElem',elm1funct) 
     .on('click','.classElem2',elm2funct) 
     .on('click','.classElem3', elm3funct); 

से jQuery's docs:

प्रतिनिधि कार्यक्रमों का लाभ यह है कि वे वंश की घटनाओं से घटनाओं को संसाधित कर सकते हैं बाद में दस्तावेज़ में जोड़े गए ments। प्रतिनिधि ईवेंट हैंडलर संलग्न होने पर मौजूद तत्व को चुनने के लिए, आप पर प्रतिनिधि कार्यक्रमों का उपयोग अक्सर ईवेंट हैंडलर को जोड़ने और निकालने की आवश्यकता से बचने के लिए कर सकते हैं।

+0

और यह किसी भी समय किसी पृष्ठ पर मौजूद प्रत्येक इंस्टेंस के लिए काम करेगा? तो मान लें कि मेरे पास एक आवर्धक ग्लास आइकन है और मैं इसे 13 div तत्वों में जोड़ता हूं। क्या प्रत्येक आवर्धक ग्लास में सही इवेंट हैंडलर असाइन किया जाएगा? मैं बस पूरी तरह से बनना चाहता हूँ। –

+0

हां 'बॉडी', 'दस्तावेज़' या उन तत्वों के पूर्वजों को '.on() 'लागू करके, क्लिक पर असाइन किए गए फ़ंक्शंस आपके क्लास चयनकर्ताओं से मेल खाने वाले सभी तत्वों के लिए काम करेंगे, यहां तक ​​कि नए – DarkAjax

+0

प्रदर्शन के, प्रतिनिधि कार्यक्रम हैंडलर को लक्ष्य के करीब ('classElem', आदि) के रूप में संलग्न किया जाना चाहिए। यदि लक्ष्य '.classElem' हमेशा आईडी' myDiv' के साथ एक div के भीतर होगा, तो '$ (' # myDiv ') का उपयोग करें (' क्लिक करें ','classElem', elm1funct) '। – Sinjai

7

@crush के रूप में उल्लेख किया है, unbinding और फिर से बाध्यकारी घटनाओं से बचने के लिए एक घटना सौंप दृष्टिकोण का उपयोग करें:

$(document).on('click', '.classElem', elm1funct); 
संबंधित मुद्दे