2010-06-24 18 views
8

तो एक विशिष्ट पृष्ठ पर मेरे पास पृष्ठ पर उपयोगकर्ता और उनकी कार्रवाई के आधार पर 3 और 8 के बीच कहीं भी फॉर्म तत्व हैं।सभी फॉर्म तत्वों पर एक ऑनब्लर जोड़ें

मैं पेज पर गतिशील रूप से सभी फॉर्म तत्वों के लिए एक विशिष्ट ऑनब्लर ईवेंट कैसे जोड़ सकता हूं?

तो मेरे पास है:

function doThisOnBlur() { stuff } 

मैं कैसे जोड़ सकते हैं कि इन एक बार पृष्ठ लोड के सभी के लिए एक ही कार्य करते हैं। पृष्ठ लोड होने के बाद कोई तत्व नहीं बनाया गया है लेकिन अलग-अलग उपयोगकर्ताओं के लिए अलग-अलग तत्व दिखाई दे सकते हैं।

<input type="text" id="x"> 
<input type="text" id="y"> 
<select id="z">...</select> 

क्या यह संभव है?

+0

प्रत्येक तत्व के लिए अद्वितीय के रूप में विशिष्ट? गतिशील रूप से बनाए गए तत्वों के रूप में फ्लाई पर? – Matt

उत्तर

14

संपादित करें: अद्यतन प्रश्न के लिए
उपयोग .blur() और इस के लिए एक गुमनाम समारोह (कोई फर्क नहीं पड़ता देखते हैं कि कितने तत्वों):

$(":input").blur(function() { 
    //do stuff 
}); 

आप कुछ क्षेत्रों के लिए कुछ कार्यों बाध्य करने की जरूरत है , नामों पर कक्षाओं या attribute selector का उपयोग करें, उन्हें अलग करने के लिए कुछ भी ... यदि चयनकर्ता को कोई तत्व नहीं मिलता है तो यह किसी ईवेंट को किसी ईवेंट हैंडलर को बाध्य नहीं करेगा। इस तरह, एक ही समग्र कोड सभी उपयोगकर्ताओं के लिए काम करता है, भले ही वे केवल उपलब्ध 0 तत्वों के देखें।


मूल प्रश्न के लिए: तत्वों गतिशील के बाद पृष्ठ-लोड जोड़ा गया था यदि।
मुझे लगता है कि .live() कब्जा करने के लिए blur घटना क्या आप के बाद यहाँ हो रहा है, चयनकर्ता के रूप में :input का उपयोग कर:

$(":input").live('blur', function() { 
    //do stuff 
}); 
+0

या '$ (": इनपुट ")। धुंध (फ़ंक्शन() {..}); 'लाइव भविष्य के तत्वों के लिए पृष्ठ देखता है, और यदि पृष्ठ लोड के बाद तत्व जोड़ नहीं रहा है तो इसकी वास्तव में आवश्यकता नहीं है। हालांकि दोनों काम करेंगे। –

+0

@Jim - इस उत्तर को पोस्ट करने के बाद प्रश्न को स्पष्ट करने के लिए संपादित किया गया था, मैं उसका संपादन शामिल करने के लिए अपडेट करूंगा। –

7

jQuery के बिना:

function doThisOnBlur(){ 
// your fancy code 
} 

var inputs = document.getElementsByTagName('input'); 
var selects = document.getElementsByTagName('select'); 

for (var i = 0; i < inputs.length; i++) 
    inputs[i].onblur = doThisOnBlur; 
for (var i = 0; i < selects.length; i++) 
    selects[i].onblur = doThisOnBlur; 

मैं के रूप में मैं कर सकता यह सबसे सरल बना दिया। मैं उस पर प्रतिक्रिया करता हूं और इवेंट हैंडलर को इस तरह से असाइन नहीं करता हूं, लेकिन मैंने आपके प्रश्न का उत्तर देने की ओर इशारा किया।

+0

यह गतिशील रूप से जोड़े गए तत्वों के लिए कैसे काम करता है? :) –

+0

यदि आप डायनामिक एलिमेंट बाइंडिंग चाहते हैं तो मैं jQuery का उपयोग करूंगा: ऐसा करने के लिए जीते हैं, उन्हें इस फीचर को टीई में बहुत ज्यादा मिला है! – RobertPitt

+0

मुझे नहीं पता कि मैंने यह क्यों लिखा है, मुझे अपना नाम जांचना चाहिए और महसूस करना चाहिए कि आपने एक उत्तर पोस्ट नहीं किया है:/क्षमा करें – RobertPitt

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