我有一个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=
为什么我无法在请求中观察“提交”或“预览”名称?
答案 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