gpt4 book ai didi

jQuery serializeArray 不包括单击的提交按钮

转载 作者:行者123 更新时间:2023-12-03 21:25:45 25 4
gpt4 key购买 nike

我有一个有两个按钮的表单。一个用于保存记录,另一个用于取消保存过程。我正在使用 rails.js (对于那些不了解的人来说是一个常见的 AJAX/jQuery 插件) javascript 文件,它与 jQuery 一起使用以实现不显眼的 javascript/ajax来电。当我通过 ajax 发送表单数据时,我希望将我单击的按钮的名称和值与其余数据一起提交,以便我可以根据单击的按钮来决定要做什么。

rails.js 文件中的方法使用 .serializeArray() 将表单数据发送到服务器。问题是这不包括我单击的按钮的名称/值对。 jQuery 的网站声明他们是故意这样做的(尽管我认为他们应该这么做):

.serializeArray() 方法使用 successful controls 的标准 W3C 规则来确定它应包含哪些元素;特别是该元素不能被禁用,并且必须包含 name 属性。无提交由于未使用按钮提交表单,因此按钮值已序列化。”

他们怎么能假设表单不是使用按钮提交的?我认为这是没有意义的,也是一个错误的假设。

根据 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>

最佳答案

Is [there] another method that DOESN'T exclude the activated button in a serialization?

不存在,该行为基于 submit事件 <form> ,而不是按钮的,例如按 Enter 或调用 .submit() 在 JavaScript 中。您在这里混合了 2 个概念,即 .serialize() .serializeArray() 可能与按钮点击有任何关系,也可能没有任何关系 - 这只是一个单独的事件,它们没有联系。这些方法的级别更高:您可以出于任何原因随时序列化表单(或其子集)。

但是,您可以添加提交名称/值对,就像从该按钮提交的普通表单一样,例如,如果您是从按钮提交的话:

$("#mySubmit").click(function() {
var formData = $(this).closest('form').serializeArray();
formData.push({ name: this.name, value: this.value });
//now use formData, it includes the submit button
});

关于jQuery serializeArray 不包括单击的提交按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com