我遇到了奇怪的行为:因为其中一种形式$().serialize()
方法不起作用(返回空字符串)。仅限Opera(Linux,12.16)。适用于Android上的Chromium,FF和Opera。
表格
<form id="new-story-form" role="form" >
<div class="form-group">
<label for="txt-storyname" class="control-label">Story name</label>
<input type="text" name="name" class="form-control" id="txt-storyname" required="required">
</div>
<div class="form-group">
<label for="num-storylength" class="control-label">Story length</label>
<input type="number" name="length" class="form-control" id="num-storylength" value="20" min="10" max="500" required="required">
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">Начать</button>
</div>
</form>
提交的Javascript是:
$("#new-story-form").submit(function (e) {
e.preventDefault();
var post_data = $(this).serialize();
console.log(post_data);
$.post("/post", post_data ,function (data) {
console.log(data);
show_message("S", 'success');
var update = setTimeout(function () {
location.reload();
}, 1000);
}).fail(function (err) {
$.each(err.responseJSON, function (index, value) {
console.log(index, value);
show_message(index + ' - ' + value, 'danger');
});
});
});
如果我在Opera调试器中查看var post_data = $(this).serialize();
,$(this)
包含普通表单对象,但post_data
为""
。
这是我可以错过的吗?
答案 0 :(得分:3)
问题似乎是输入的名称“length
”,请选择其他名称。
我猜这与表单的built-in property "length"存在冲突。
jQuery文档中有一个注释: 表单及其子元素不应使用与表单属性冲突的输入名称或ID,例如提交,长度或方法。名称冲突可能导致令人困惑的失败。