2011-12-21 14 views
9

के अंदर सभी तत्वों के स्वचालित रूप से मान प्राप्त करें मेरे पास मुख्य div है और इसके अंदर, बहुत सारे इनपुट टेक्स्ट और रेडियो बटन हैं। इस तरह:Jquery div

<div id="mainDiv"> 
    <input type="text" name="text-1" /> <br/> 

    <input type="radio" name="radio-1" />Yes 
    <input type="radio" name="radio-1" />No <br/> 

    <input type="text" name="text-2" /> <br/> 
    <input type="text" name="text-3" /> <br/> 
</div> 
<img src="img/img.gif" onclick="getAllValues();" /> 

मैं समारोह "getAllValues ​​()" JQuery में जो "mainDiv" में सभी मूल्यों को प्राप्त करने और उन्हें एक स्ट्रिंग में बचाने परिभाषित करना चाहते हैं। यह संभव है?

+1

आप पर एक नज़र लिया है '.erialize()' (http://api.jquery.com/serialize/)? क्या यह आपके बिल में फिट है? यदि नहीं, क्यों? – PPvG

उत्तर

16

इसे प्राप्त करने के लिए आप सभी फॉर्म फ़ील्ड का चयन कर सकते हैं और map() का उपयोग अपने मूल्यों से सरणी बनाने के लिए कर सकते हैं, जिसे उनके type के आधार पर पुनर्प्राप्त किया जा सकता है। इस प्रयास करें:

function getAllValues() { 
    var inputValues = $('#mainDiv :input').map(function() { 
     var type = $(this).prop("type"); 

     // checked radios/checkboxes 
     if ((type == "checkbox" || type == "radio") && this.checked) { 
      return $(this).val(); 
     } 
     // all other fields, except buttons 
     else if (type != "button" || type != "submit") { 
      return $(this).val(); 
     } 
    }) 
    return inputValues.join(','); 
} 

if बयान एक साथ यहाँ शामिल हो सकता है, लेकिन मैं उन्हें स्पष्टता के लिए अलग छोड़ दिया है। ऐसे ही

+0

यह इनपुट टेक्स्ट के साथ काम करता है, लेकिन रेडियो बटन के साथ मैं केवल चयनित मान लेता हूं। धन्यवाद रॉय! – Danilo

+0

@ डैनिलो कोई समस्या नहीं, मेरा अपडेट देखें –

5

कोशिश कुछ:

function getAllValues() { 
    var allVal = ''; 
    $("#mainDiv > input").each(function() { 
    allVal += '&' + $(this).attr('name') + '=' + $(this).val(); 
    }); 
    alert(allVal); 
} 
2

यहाँ समाधान है जो आप JSON स्ट्रिंग बनाने जा रहा है। यह पाठ फ़ील्ड के मानों का हो रहा है, बक्से और चुनिंदा तत्वों की जाँच करें:

function buildRequestStringData(form) { 
    var select = form.find('select'), 
     input = form.find('input'), 
     requestString = '{'; 
    for (var i = 0; i < select.length; i++) { 
     requestString += '"' + $(select[i]).attr('name') + '": "' +$(select[i]).val() + '",'; 
    } 
    if (select.length > 0) { 
     requestString = requestString.substring(0, requestString.length - 1); 
    } 
    for (var i = 0; i < input.length; i++) { 
     if ($(input[i]).attr('type') !== 'checkbox') { 
      requestString += '"' + $(input[i]).attr('name') + '":"' + $(input[i]).val() + '",'; 
     } else { 
      if ($(input[i]).attr('checked')) { 
       requestString += '"' + $(input[i]).attr('name') +'":"' + $(input[i]).val() +'",'; 
      } 
     } 
    } 
    if (input.length > 0) { 
     requestString = requestString.substring(0, requestString.length - 1); 
    } 
    requestString += '}'; 
    return requestString; 
} 

आप इस तरह फ़ंक्शन को कॉल कर सकते हैं:

buildRequestStringData($('#mainDiv')) 

और परिणाम http://jsfiddle.net/p7hbT/