【发布时间】:2010-10-24 11:00:42
【问题描述】:
我有一个有两个按钮的表单。一个用于保存记录,另一个用于取消保存过程。我正在使用rails.js (一个常见的 AJAX/jQuery 插件,供那些不知道的人使用) javascript 文件,它与 jQuery 一起用于不显眼的 javascript/ajax 调用。当我通过 ajax 发送表单数据时,我希望我单击的按钮的名称和值与其余数据一起提交,以便我可以根据单击的按钮决定要做什么。
rails.js 文件中的方法使用.serializeArray() 将表单数据发送到服务器。问题是这不包括我单击的按钮的名称/值对。 jQuery 的网站声明他们是故意这样做的(尽管我认为他们应该这样做):
“.serializeArray() 方法使用successful controls 的标准 W3C 规则来确定它应该包含哪些元素;特别是该元素不能被禁用并且必须包含一个名称属性。没有提交按钮值被序列化,因为表单是未使用按钮提交。”
他们怎么能假设没有使用按钮提交表单?这是没有意义的,我认为这是一个错误的假设。
根据 W3C 规则,为提交表单而激活的按钮被视为成功控制。
既然 jQuery 的开发者决定故意这样做,我可以假设还有另一种方法不在序列化中排除激活的按钮吗?
编辑:这是我的表单可能看起来像的快速示例...
<!DOCTYPE html5>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#form').submit(function(e) {
// put your breakpoint here to look at e
var x = 0;
});
});
</script>
</head>
<body>
<form id="form">
<input name="name" type="text"><br/>
<input name="commit" type="submit" value="Save"/>
<input name="commit" type="submit" value="Cancel"/>
</form>
</body>
【问题讨论】:
-
对于其他发现此问题的人,
<button>标签也存在同样的问题。
标签: jquery serialization w3c form-submit