jQuery序列化数组不包括单击的提交按钮

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (94)

我有一个有两个按钮的表格。一个用于保存记录,另一个用于取消保存过程。我正在使用rails.js与jQuery一起工作的JavaScript文件,用于不引人注目的javascript/Ajax调用。当我通过Ajax发送表单数据时,我希望将我单击的按钮的名称和值与其他数据一起提交,以便我可以根据单击哪个按钮来决定该做什么。

方法rails.js文件使用.serializeArray()用于向服务器发送表单数据。这不包括我单击的按钮的名称/值对。jQuery的网站声明他们是故意这样做的:

.serializeArray()方法使用标准w3c规则成功控制来确定它应该包含哪些元素;特别是不能禁用元素,并且必须包含name属性。没有序列化Submit按钮值,因为表单没有使用按钮提交。“

他们怎么能假设没有使用按钮提交表单呢?我相信这是没有道理的,也是错误的假设。

根据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>
提问于
用户回答回答于

没有,行为是基于submit事件<form>,不是按钮,例如按回车或调用.submit()。你在这里混合了两个概念.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
});
用户回答回答于

我使用以下代码片段,基本上添加了一个名称相同的隐藏元素

 var form = $("form");
 $(":submit",form).click(function(){
            if($(this).attr('name')) {
                $(form).append(
                    $("<input type='hidden'>").attr( { 
                        name: $(this).attr('name'), 
                        value: $(this).attr('value') })
                );
            }
        });

 $(form).submit(function(){
     console.log($(this).serializeArray());
 });

扫码关注云+社区

领取腾讯云代金券