很长一段时间我一直在使用 vanilla 这样的Javascript:
javascript
序列化表单并通过XMLHttpRequest POST它。但是我注意到这段代码没有正确处理type=number。是否有更好的最小模式?
答案 0 :(得分:2)
type=number
, input元素表示一个控件,用于将元素的值设置为表示数字的字符串
因此type="Number"
的值将是一个字符串,如果转换为有效浮点数(Number(YOUR_VALUE)
)
答案 1 :(得分:1)
正如Rayon Dabre指出的那样,type=number
输入仍然是一个字符串。您可以以更智能的方式从表单中收集数据。例如:
// Map of type -> function that converts the value
// Add more converters if you need'em
var type2converter = {number: Number}
// Converter that does not do anything for fallback
var id = function (x) { return x }
function getFormData(form) {
var data = {}
var converter
var input
for (var i = 0; i < form.length; i++) {
input = form[i]
if (input.name && input.value) {
// Get the function that converts the data, or fallback to "dummy-converter"
converter = converters[input.type] || id
data[input.name] = converter(input.value)
}
}
return data
}
这样返回的对象将具有您在HTML中定义的类型。它必须在服务器上验证。
答案 2 :(得分:0)
尝试包装调用以检索parseInt()中的值 - 例如
parseInt(input.value);
这将检索表单中值的Integer表示。你可能想要对它进行一些健全性检查,但要确保它是一个int并且不会破坏它的东西。