2011-08-26 14 views
5

में डाल कैसे मान लें कि मैं इस करते हैं: कैसे मैं प्रपत्र foo भीतर सरणी आदानों की मान प्राप्त कर सकतेइनपुट [] मूल्यों को पार्स और उन्हें एक JavaScript

<form id='foo'> 
<input name='bar[name]' /> 
<input name='bar[age]' /> 
</form> 

और उन्हें एक साहचर्य सरणी में डाल दिया/इस तरह की वस्तु:

var result = {bar:{name:'blah',age:21}}; 

पीएस मैं इसके लिए किसी भी ढांचे का उपयोग नहीं करना चाहता।

+3

"शुद्ध जावास्क्रिप्ट" द्वारा मैं इसका मतलब लेता हूं "अन्य लोगों द्वारा लिखित जावास्क्रिप्ट का उपयोग किए बिना, जैसे कि jQuery या YUI टीम"? ("फ्लैश के बिना" या "बिना डोम" के विरोध में?) – Quentin

+2

तकनीकी रूप से, jQuery *** *** "शुद्ध जावास्क्रिप्ट" है। क्या आप समझना चाहते हैं कि [सादा पुराने डीओएम के साथ फॉर्म तत्व कैसे पढ़ते हैं] (https://developer.mozilla.org/en/DOM/HTMLFormElement) या क्या आप अधिक उत्पादक बनना चाहते हैं और सामग्री पूर्ण हो जाना चाहते हैं? –

+0

'querySelectorAll' भी शुद्ध है? – pimvdb

उत्तर

2

यह आपको तत्व मिल जाएगा:

var result = {}; 
    var elements = document.forms.foo.getElementsByTagName("input"); 
    for(var i = 0; i < elements.length; i++) 
    { 
     /* do whatever you need to do with each input */ 
    } 
+0

हाँ ... लेकिन हम नाम गुणों के मूल्यों को कैसे प्राप्त करने जा रहे हैं। कई बार [नाम], बार [आयु] –

+0

@ डिमिटिसपैपेरगोइउ फॉर लूप में आप 'elments [i] .name' – scrappedcola

+0

धन्यवाद का उपयोग करते हैं .. मैंने किया और यह –

2

आप इस तरह एक वस्तु को तत्वों मैप कर सकते हैं।

function putIntoAssociativeArray() { 

    var 
     form = document.getElementById("foo"), 
     inputs = form.getElementsByTagName("input"), 
     input, 
     result = {}; 

    for (var idx = 0; idx < inputs.length; ++idx) { 
     input = inputs[idx]; 
     if (input.type == "text") { 
      result[input.name] = input.value; 
     } 
    } 

    return result; 
} 
1
var inputs = document.getElementsByTagName('input'); 
var field_name, value, matches, result = {}; 
for (var i = 0; i < inputs.length; i++) { 
    field_name = inputs[i].name; 
    value = inputs[i].value; 

    matches = field_name.match(/(.*?)\[(.*)\]/); 

    if (!results[matches[0]]) { 
     results[matches[0]] = {}; 
    } 
    results[matches[0]][matches[1]] = value; 
} 
2
var form = document.getElementById('foo'); 
var inputs = form.getElementsByTagName("input"); 
var regex = /(.+?)\[(.+?)\]/; 
var result = {}; 
for(var i = 0; i < inputs.length; ++i) { 
    var res = regex.exec(inputs[i].name); 
    if(res !== null) { 
     if(typeof result[ res[1] ] == 'undefined') result[ res[1] ] = {}; 
     result[ res[1] ][ res[2] ] = inputs[i].value; 
    } 
} 
3

मैं इस अपने आप को क्या करना है और इस सवाल का मैं जवाब में से कोई भी पसंद नहीं था पाने के बाद करने के लिए आवश्यक: मैं regex पसंद नहीं है और दूसरों को सीमित कर रहे हैं।

आप data कई तरीकों से प्राप्त कर सकते हैं। जब मैं इसे कार्यान्वित करता हूं तो मैं jQuery की serializeArray विधि का उपयोग करूँगा।

function parseInputs(data) { 
    var ret = {}; 
retloop: 
    for (var input in data) { 
     var val = data[input]; 

     var parts = input.split('[');  
     var last = ret; 

     for (var i in parts) { 
      var part = parts[i]; 
      if (part.substr(-1) == ']') { 
       part = part.substr(0, part.length - 1); 
      } 

      if (i == parts.length - 1) { 
       last[part] = val; 
       continue retloop; 
      } else if (!last.hasOwnProperty(part)) { 
       last[part] = {}; 
      } 
      last = last[part]; 
     } 
    } 
    return ret; 
} 
var data = { 
    "nom": "123", 
    "items[install][item_id_4]": "4", 
    "items[install][item_id_5]": "16", 
    "items[options][takeover]": "yes" 
}; 
var out = parseInputs(data); 
console.log('\n***Moment of truth:\n'); 
console.log(out); 
संबंधित मुद्दे