2

我有一个 Ajax GET 请求,如下所述

$(document).ready(function() {
    $('#comment-edit-form').submit(function() {
        $.ajax({
            type: $(this).attr('method'),
            url: '/comments/edit/' + $(this).attr('comment_pk') + '/',
            data: $(this).serialize(),
            success: function(data){}
        });
        return false;
    });
});

表格是这样的

<form method="get" id="comment-edit-form">
..

<input class="btn btn-primary" type="submit" name="preview" value="Preview">
<input class="btn btn-primary" type="submit" name="submit" value="Submit">

</form>

在这个表单中,我有两个不同的提交按钮!每个都有不同的操作!

我跟踪的 GET 请求 URL 如下所示

?input1=1&input2=2...

我期待?input1=1&input2=2&submit=?input1=1&input2=2&preview=

为什么我无法在请求中观察到“提交”或“预览”名称??

4

1 回答 1

3

这是因为 jQuery 只序列化 nodeTypesinput, select, textarea and keygen的输入类型不是submit,button, image, file or reset.

查看 jQuery 源代码,您可以知道表单元素的输入类型是根据以下正则表达式检查的:

 /^(?:submit|button|image|reset|file)$/i

此检查在您的代码.serializeArray中调用。.serialize


对于感兴趣的读者 - 这是完整的过滤器

return this.name &&  // has a name
       !jQuery(this).is(":disabled") &&  // is not a disabled input
       rsubmittable.test(this.nodeName) && // is either input, select,textarea or keygen 
       !rsubmitterTypes.test(type) && // the test explained above
       (this.checked || !manipulation_rcheckableType.test(type)); // checked
于 2013-07-07T22:12:02.973 回答