提交事件不捕获提交类型输入

时间:2013-07-07 21:57:24

标签: javascript ajax jquery

我有一个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请求网址如下所示

?input1=1&input2=2...

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

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

1 个答案:

答案 0 :(得分:3)

这是因为jQuery只有serializes the nodeTypes input, select, textarea and keygen,输入类型不是submit,button, image, file or reset

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

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

此检查位于.serializeArray,代码中由.serialize调用。


感兴趣的读者 - 这是complete filter

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