2017-01-11 6 views
0

Ich Serialisierung eine Form wie (von diesen answer inspirierte) folgt:Parsen Zahlen in jQuery.serializeArray()

function formToArray(jQueryObj){ 
var result = {}; 
var arr = jQueryObj.serializeArray(); 
$.each(arr, function(){ 
    result[this.name] = this.value; 
}); 
return result; 
} 

Dies gibt ein Objekt wie {"input1_name":"value1", "input2_name": "42"}. Einige Eingaben sind jedoch numerisch, und ich möchte, dass sie Zahlen anstelle von Zeichenfolgen zurückgeben. Also meine gewünschte Ausgabe ist {"input1_name":"value1", "input2_name": 42}, die Nummer nicht in Anführungszeichen.

Wie kann ich dies mit jQuery/JavaScript erreichen?

Danke,

Antwort

2

Wenn Sie die Zeichenfolge wieder in eine Zahl konvertieren möchten Sie Number() verwenden können:

$.each(arr, function(){ 
    if (!isNaN(this.value)) { //check if value is convertible to number 
    result[this.name] = Number(this.value); 
    } else { 
    result[this.name] = this.value; 
    } 
}); 
+0

einen Fehler gefunden zu passieren, wenn this.value === '0', ist die Bedingung falsch –

1

Sie können manuell überprüfen, ob der Wert Zahl ist.

$.each(arr, function(){ 
    if (!isNaN(this.value)) { //Check for non numbers negation 
    result[this.name] = Number(this.value); 
    } else { 
    result[this.name] = this.value; 
    } 
}); 
1

den Wert analysieren und überprüfen Sie es mit isNaN

function formToArray(jQueryObj){ 
var result = {}; 
var arr = jQueryObj.serializeArray(); 
$.each(arr, function(){ 
    result[this.name] =isNaN(parseInt(this.value))?this.value:parseInt(this.value); 
}); 
return result; 
} 
1

Sie können dies versuchen:

var result = { }; 
$.each($('form').serializeArray(), function() { 
    result[this.name] = Number(this.value) ? Number(this.value) : this.value; 
}); 
1

können Sie "string" * 1 verwenden, um eine Reihe

es schneller zu zwingen, als unter Verwendung von Number und parseInt
auch, wenn Sie parseInt verwenden erinnern 10 der Radix parseInt(number, 10)

var converted = this.value*1; 
result[this.name] = isNaN(converted) ? this.value : converted;