2016-05-27 4 views
0

Ich habe ein HTML-Formular, und ich möchte alle Daten in der gleichen Struktur wie ein $ _POST erhalten würde. Also, wenn ich einige Eingaben wie folgt aus:jQuery/Javascript erhalten Form Daten wie ein Post-Array

<input type="text" name=r[1][0] value="x"><input type="text" name=r[1][1] value="y"> 

Ich möchte bekommen und das Objekt wie folgt aus:

obj = {r:{1:{0:x,1:y}}} 

Können Sie mir bitte sagen, es gibt eine Möglichkeit, dies tun könnte? Ich versuchte serializeArray() .. und andere "benutzerdefinierte" Lösungen ohne Erfolg.

Vielen Dank! :)

+1

http://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery –

+0

danke für den Link, es half mir finden, was ich Suche nach: [GitHub] (https://github.com/macek/jquery-serialize-object) –

Antwort

2

Vor 1 Woche hatte ich fast das gleiche Problem, ich entwickelte eine Funktion, die Eingabe in ein JavaScript-Objekt konvertieren kann.

Es ist vielleicht mehr dann, was Sie brauchen, aber Sie einen Blick in diese nehmen:

var myObj = {}; 

    function addValueToObj(objet, nom) { 

       var pathBrackets = ""; 
       var regex = /\[([0-9]+)\]$/; 
       nom = nom.split("="); 
       var path = nom[0].split('.'); 

       val = nom.slice(1).join("="); 

    for (var i = 0, tmp = objet; i<path.length-1; i++) { 
        pathBrackets += path[i]+".";  
        if (path[i].match(regex)!=null) { 

         var valindex = path[i].match(regex)[1]; 
         var index = path[i].match(regex).index; 
         var newPath = path[i].substring(index, 1-path[i].length); 

         if (typeof tmp[newPath] == "undefined") { 
          tmp = tmp[newPath] = []; 
          tmp = tmp[valindex] = {}; 
         } else { 
          if (typeof tmp[newPath][valindex] == "undefined") { 
           tmp = tmp[newPath][valindex] = {}; 
          } else { 
           tmp = tmp[newPath][valindex]; 
          } 
         } 
        } else { 
         if (typeof tmp[path[i]] == "undefined") { 
          tmp = tmp[path[i]] = {}; 
         } else { 
          tmp = tmp[path[i]]; 
         } 


     } 

      } 

     tmp[path[i]] = val; 
} 

$(document).ready(function() { 
    $.each($("input"), function() { 
     addValueToObj(myObj, $(this).attr('name')+"="+$(this).val()); 
    }) 
    console.log(myObj); 
}) 

und den HTML-Code:

<form> 
x :<input type="text" name="r.1.0" value="x"> 
y :<input type="text" name="r.1.1" value="y"> 
</form> 

Ergebnis: es

{ 
"r":{ 
    "1":{ 
    "0":"x", 
    "1":"y" 
    } 
    } 
} 

Hoffnung kann dir helfen.

Hier ist die JSFiddle

+0

Wirklich nette Lösung, aber ich bevorzuge die, die den Namen in einem Standardformat hält. Ich habe einen Link dazu in einem Kommentar zum ursprünglichen Beitrag hinzugefügt. –

Verwandte Themen