2013-01-02 8 views
30

मैं बस सोच रहा था कि किसी फॉर्म के सभी बच्चे तत्वों के माध्यम से लूपिंग का सबसे अच्छा तरीका क्या होगा? मेरे रूप में इनपुट और चयन तत्व दोनों शामिल हैं।फ़ॉर्म के सभी तत्वों के माध्यम से लूप कैसे करें jQuery

फिलहाल मेरे पास है: हालांकि फार्म के इनपुट तत्वों के माध्यम से

success: function(data) { 
       $.each(data.details, function(datakey, datavalue) { 
        $('#new_user_form > input').each(function(key, value) { 
         if($(this).attr('id') == datakey) { 
          $(this).val(datavalue); 
         } 
        }); 
       }); 
      } 

यह केवल छोरों और मैं चुनिंदा तत्वों भी शामिल करना चाहते हैं:

मैं कोशिश की है:

$('#new_user_form > input, #new_user_form > select').each(function(key, value) { 

लेकिन यह काम नहीं करता है। क्या किसी को पता है कि यह क्यों हो रहा है? धन्यवाद!

+0

वर्क्स ठीक: http://jsfiddle.net/ G8tjU/आपको फॉर्म का HTML दिखाना चाहिए। – JJJ

+1

हमें HTML देखने की आवश्यकता है। – scoota269

उत्तर

57

:input चयनकर्ता के बारे में jQuery पृष्ठ से:

क्योंकि: इनपुट एक jQuery विस्तार और सीएसएस विनिर्देश का हिस्सा नहीं है, का उपयोग करके क्वेरी: इनपुट प्रदर्शन देशी डोम द्वारा प्रदान को बढ़ावा देने का लाभ नहीं ले जा सकते हैं querySelectorAll() विधि। उपयोग करते समय सर्वोत्तम प्रदर्शन प्राप्त करने के लिए: तत्वों का चयन करने के लिए इनपुट, पहले शुद्ध सीएसएस चयनकर्ता का उपयोग कर तत्वों का चयन करें, फिर .filter (": input") का उपयोग करें।

यह सबसे अच्छा विकल्प है।

$('#new_user_form *').filter(':input').each(function(){ 
    //your code here 
}); 
+1

तर्क अच्छा है लेकिन प्रारंभिक चयनकर्ता गलत है। आप फॉर्म तत्व फ़िल्टर कर रहे हैं। फिल्टर फ़ंक्शन का उपयोग करने के लिए आपको इनपुट तत्वों को फ़िल्टर करने के लिए '#new_user_form *' जैसी कुछ करने की आवश्यकता होगी। – scoota269

+1

@ scoota269 ओह, मैं तारांकन भूल गया। मेरी गलती! – Ohgodwhy

+0

यह ठीक काम करता है। धन्यवाद! – devoncrazylegs

1

$('#new_user_form :input') आपका रास्ता आगे होना चाहिए। > चयनकर्ता के चूक को नोट करें। एक वैध HTML फॉर्म एक इनपुट टैग के लिए एक टैग टैग के प्रत्यक्ष बच्चे होने की अनुमति नहीं देगा।

1

क्या होता है, यदि आप इस तरह से कार्य करें: -

$('#new_user_form input, #new_user_form select').each(function(key, value) { 

देखें LIVE DEMO

8
$('#new_user_form').find('input').each(function(){ 
    //your code here 
}); 
+8

यह वास्तव में काम करता है। यदि आप चयन और टेक्स्टरेज़ भी प्राप्त करना चाहते हैं: $ ('# new_user_form')। ('इनपुट, टेक्स्टरेरा, चयन करें') खोजें। प्रत्येक (फ़ंक्शन() { // आपका कोड यहां }); – mpemburn

16

शुद्ध जावास्क्रिप्ट कि मुश्किल नहीं है:

for(var i=0; i < form.elements.length; i++){ 
    var e = form.elements[i]; 
    console.log(e.name+"="+e.value); 
} 

ध्यान दें: चूंकि प्रपत्र .elements एक ऑब्जेक्ट फॉर-इन लूप अपेक्षित के रूप में काम नहीं करता है।

उत्तर मिला here (by Chris Pietschmann), here (W3S) दस्तावेज।

7

#jquery Freenode आईआरसी चैनल से लिया के रूप में:

$.each($(form).serializeArray(), function(_, field) { /* use field.name, field.value */ }); 

धन्यवाद चैनल पर @Cork करने के लिए।

+0

यदि आपके पास सभी रूपों के लिए श्रोता है तो यह एक आदर्श समाधान है। यह मेरा मामला है: '$ (' body ')। (' Submit ',' form ', function (e) {e.preventDefault(); $ .each ($ (this) .serializeArray(), फ़ंक्शन (काउंटर) , ऑब्जेक्ट) {console.log (ऑब्जेक्ट)});}); धन्यवाद! – Albert

+1

कॉलबैक का पहला पैरामीटर इंडेक्स है इसलिए यह होना चाहिए: '$ .each ($ (फॉर्म) .serializeArray(), फ़ंक्शन (अनुक्रमणिका, फ़ील्ड) {});' अभी भी ऊपर उठाना :) –

3

मैं उपयोग कर रहा हूँ:

$($('form').prop('elements')).each(function(){ 
    console.info(this) 
}); 

यह बदसूरत लगता है, लेकिन मेरे लिए यह अभी भी jQuery साथ सभी तत्वों को प्राप्त करने के लिए बेहतर तरीका है।

2

मैं इस सरल jQuery टुकड़ा पाया है, बस चयनकर्ताओं के प्रकार मैं के साथ काम करना चाहते हैं को चुनने के लिए आसान होने के लिए:


$("select, input").each(function(){ 
    // do some stuff with the element 
}); 
मेरे लिए

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

  • कोई संबंधित समस्या नहीं^_^