2011-08-26 14 views
5

Diciamo ho questo:Come analizzare l'input [] valori e messo in un array JavaScript

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

Come posso ottenere i valori degli ingressi matrice entro la forma foo e metterli in un array associativo/oggetto del genere:

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

PS Non voglio usare alcun framework per questo.

+3

Con "Pure JavaScript", suppongo che intendi "Senza utilizzare JavaScript scritto da altre persone, come i team jQuery o YUI"? (Al contrario di "Senza Flash" o "Senza DOM"?) – Quentin

+2

Tecnicamente, jQuery *** è *** "puro JavaScript". Vuoi capire come leggere [elementi del form con plain-old DOM] (https://developer.mozilla.org/en/DOM/HTMLFormElement) o vuoi essere più produttivo e Get Stuff Done? –

+0

è 'querySelectorAll' anche puro? – pimvdb

risposta

2

Questo ti porterà gli elementi:

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

sì ... ma come otterremo i valori degli attributi del nome.Numero bar [nome], bar [età] –

+0

@DimitrisPapageorgiou nel ciclo for si usa 'elments [i] .name' – scrappedcola

+0

grazie .. . L'ho fatto e ha funzionato –

2

è possibile mappare gli elementi di un oggetto come questo.

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

avevo bisogno di fare questo io stesso e dopo aver trovato questa domanda non mi piaceva nessuna delle risposte: Non mi piace regex e gli altri sono limitati.

È possibile ottenere la variabile data in molti modi. Utilizzerò il metodo serializeArray di jQuery durante l'implementazione.

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); 
Problemi correlati