.serialize()不适用于Opera中的特定fom

时间:2013-11-08 21:45:07

标签: jquery forms serialization opera

我遇到了奇怪的行为:因为其中一种形式$().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""

这是我可以错过的吗?

1 个答案:

答案 0 :(得分:3)

问题似乎是输入的名称“length”,请选择其他名称。

我猜这与表单的built-in property "length"存在冲突。

jQuery文档中有一个注释: 表单及其子元素不应使用与表单属性冲突的输入名称或ID,例如提交,长度或方法。名称冲突可能导致令人困惑的失败。