使用 jQuery 在表单中检索提交按钮的名称


Retrieve the name of the submit button in a form using jQuery

我正在使用PHP和jQuery。我有 2 个文件

test.php

<script>
    $(document).ready(function(){
        $(".form-register").submit(function (e) {
            var form_data = $(this).serialize();
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: "test2.php",
                data: form_data,
                dataType: 'json',
                success: function(){
                    alert(form_data);
                }
            });
        });
    });
</script>
<form class="form-register">
    <input name="email" type="text"/>
    <input name="name" type="text"/>
    <input type="submit" name="register"/>
</form>

第二个文件test2.php

<?php
if(isset($_POST['register'])){
    echo json_encode('Message from test2.php');
}else{
    echo json_encode('post no received');
}

似乎我无法检索$_POST['register']因为当我检查alert(form_data);时,仅显示emailname

我有什么办法可以得到$_POST['register']吗?

将值属性添加到提交按钮并使用$('form').serializeArray() .尝试:

$(".form-register").submit(function (e) {
  var formData = $(this).serializeArray();
  var name = $(this).find("input[type=submit]").attr("name");
  var value = $(this).find("input[type=submit]").val();
  formData.push({ name: name, value: value });
  //now use formData, it includes the submit button
  $.ajax({
     type: "POST",
     url: "test2.php",
     data: formData,
     dataType: 'json',
     success: function(){
         alert(form_data);
     }
  }); 
});

.serialize().serializeArray() 都不会序列化提交按钮值。

.serialize()

。没有序列化提交按钮值,因为表单不是使用按钮提交的。

.serializeArray()

。没有序列化提交按钮值,因为表单不是使用按钮提交的。

只有成功的控件才会序列化。

输入提交元素实际上是一个成功的控件,但如上所述,由于表单不是使用提交按钮提交的,因此 jquery 序列化不会包含输入提交值属性。

如果要使用.serializeArray()只需将输入提交元素名称和值属性值作为对象添加到序列化数组中,如下所示。

$(document).ready(function(){
  $(".form-register").submit(function (e) {
    var form_data = $(this).serializeArray();
    var $submit = $(this).find('input[type="submit"]');
    form_data.push({name: $submit.prop("name"), value: $submit.val()});
    console.log(form_data);
    
    // do your ajax request here...
    
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form-register">
  <input name="email" type="text"/>
  <input name="name" type="text"/>
  <input type="submit" name="submit" value="register"/>
</form>

如果要使用.serialize()只需将提交元素的值和名称属性的值添加到.serialize()方法创建的文本字符串中。请注意,字符串需要进行 URL 编码。

$(document).ready(function(){
  $(".form-register").submit(function (e) {
    var form_data = $(this).serialize();
    var $submit = $(this).find('input[type="submit"]');
    form_data = form_data + "&" + $submit.prop("name") + "=" + $submit.val();
    console.log(form_data);
    // do your ajax request here...
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form-register">
  <input name="email" type="text"/>
  <input name="name" type="text"/>
  <input type="submit" name="submit" value="register"/>
</form>