2011-08-26 13 views
5

Powiedzmy mam to:Jak przetwarzać wejściowe [] Wartości i umieścić je w Javascript Array

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

Jak mogę uzyskać wartości wejść tablicy w formie foo i umieścić je w tablicy asocjacyjnej/obiekt taki jak ten:

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

PS Nie chcę używać do tego żadnych frameworków.

+3

Przez "Czysta JavaScript" rozumiem "Bez używania JavaScriptu napisanego przez inne osoby, takie jak zespoły jQuery lub YUI"? (W przeciwieństwie do "Bez Flasha" lub "Bez DOM"?) – Quentin

+2

Z technicznego punktu widzenia jQuery *** to "czysty JavaScript". Czy chcesz zrozumieć, jak czytać [elementy formularzy ze zwykłym DOM] (https://developer.mozilla.org/en/DOM/HTMLFormElement) lub chcesz być bardziej produktywny i robić rzeczy robione? –

+0

jest "querySelectorAll" również czysty? – pimvdb

Odpowiedz

2

To będzie Ci elementy:

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

tak ... ale jak mamy zamiar uzyskać wartości atrybutów name.Namely bar [name], bar [age] –

+0

@DimitrisPapageorgiou w pętli for używasz 'elments [i] .name' – scrappedcola

+0

dzięki .. Zrobiłem to i zadziałało –

2

można odwzorować elementy do obiektu takiego.

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

musiałem to zrobić sam, a po znalezieniu na to pytanie nie jak każda z odpowiedzi: nie podoba mi regex i inni są ograniczone. Można uzyskać zmienną data na wiele sposobów. Będę używał metody jQuery's serializeArray, gdy zaimplementuję to.

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); 
Powiązane problemy