Domanda

ho questo HTML:

<form id='myform'>
<input name='title' value='foo'/>
</form>

E creo una matrice di oggetti da questo modo:

var dataArray = $("#myform").serializeArray();

Ora come faccio accesso 'title' in dataArray? Questo non funziona:

alert(dataArray['title']);
alert(dataArray['title'].val());
È stato utile?

Soluzione

Simile a quello che Nick ha scritto, ma un po 'più pulito

var dataArray = $("#myform").serializeArray(),
    dataObj = {};

$(dataArray).each(function(i, field){
  dataObj[field.name] = field.value;
});

Poi accedere allo stesso modo

alert(dataObj['title']);

Altri suggerimenti

È possibile scorrere, come @ Tom ha ... o se si sta accedendo più di uno, essere un po 'più efficiente e loop di una volta, la creazione di un oggetto come questo:

var dataArray = $("#myform").serializeArray(),
    len = dataArray.length,
    dataObj = {};

for (i=0; i<len; i++) {
  dataObj[dataArray[i].name] = dataArray[i].value;
}

Quindi è possibile accedervi come si vuole, ad esempio:

alert(dataObj['title']); //or alert(dataObj.title);

È possibile provarlo qui .

alert(dataArray[0].name);
alert(dataArray[0].value);

for (i=0; i<dataArray.length; i += 1) {
    if (dataArray[i].name === "title") {
        // do something here...
    }
}

Esegui console.log(dataArray);, quindi aprire la finestra di ispezione Proprietà, e controllare la console. In Chrome, devi fare clic destro e selezionare "Inspect Element" e quindi fare clic sull'icona "> =" guardando in basso a sinistra, è la seconda da sinistra.

In Firefox che ci si installa Firebug e c'è una scheda denominata "Console"

Non è sicuro se è disponibile in IE, probabilmente qualcosa negli strumenti di sviluppo (premere F12 ), ma io non lo consiglio in via di sviluppo in IE.

In ogni caso questo elencherà l'oggetto in un modo che permette di navigare e vedere i valori di ciascun elemento. In questo modo è possibile utilizzare questo per decifrare come accedere ai valori:)

In bocca al lupo

L'aggiunta di questo comunque per aiutare gli altri in futuro. modo di ispezionare rapidamente tutti i valori buoni.

var formdata = $( "#myform" ).serializeArray();
var formdata = JSON.stringify(formdata);
alert (formdata);

append / eco / stampare dataArray[0].name ad un div vi darà 'titolo'

Alerting serializeArray di ingressi in myDiv (nota: il selettore :input includerà selezionare e tag textarea come pure!):

//alert(fData.length) // how many inputs got picked up 
var fData=$("#myDiv :input").serializeArray();
var msg=""; 
for(var i=0;i<fData.length;i++){
    var raKy=Object.keys(fData[i]); 
    msg+="\n"+raKy[0]+":"+eval("fData[i]."+raKy[0])+" "+raKy[1]+":"+eval("fData[i]."+raKy[1]); 
}
alert(msg);

Con uderscore.js, questo è come possiamo andare su di esso:

var serializedArray = $('form#spiderman-application').serializeArray();

var serializedObject = _.object(
  _.pluck(serializedArray, 'name'), 
  _.pluck(serializedArray, 'value')
)

console.log(serializedObject);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

<form id="spiderman-application">
  <legend>Application Form</legend>
  <input name="./fname" value="Peter" />
  <input name="./lname" value="Parker" />
</form>

Buona fortuna ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top