2

我陷入了奇怪的行为:因为其中一种表单$().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');
                        });

                    });
        });

如果我var post_data = $(this).serialize();在 Opera 调试器中查看,$(this)包含正常形式的对象,但是post_data"".

这是我可以在这里错过的东西吗?

4

1 回答 1

3

问题似乎是length输入的名称“”,请选择另一个名称。

我猜这与表单的内置属性“长度”有冲突。

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

于 2013-11-08T22:15:46.277 回答