jQuery-验证:使用远程隐藏按钮?

jQuery-validate: Using remote hides button?

当我使用 remote method from the jQuery Validation Plugin 并按下提交按钮时,提交按钮名称未列在 $_POST 数组中。这是一个错误还是我做错了什么?

这是一个小例子:

<?php
if(!empty($_POST))print_r($_POST);
?>
<form method="POST" id='mainForm'>
  <input type='email' name="email" value="test@test.com">
  <button name="superbutton">Press me</button>
</form>

当我按下 superbutton 时,我得到以下输出

当我像这样添加 jQuery 验证插件时

 $("#mainForm").validate({
   rules: {
     email: {
       required: true,
       email: true
     }
   }
 });

我仍然得到相同的输出。但是,当我添加远程方法时:

 $("#mainForm").validate({
   rules: {
     email: {
       required: true,
       email: true,
       remote: {
        url: "test.php"
       }
     }
   }
 });

test.php

<?php
header('Content-Type: application/json');
echo json_encode("true");

然后 superbutton 不再在 '$_POST` 数组中。

我是不是做错了什么?

使用本地验证方法时,jquery-validate 在验证失败时调用 event.preventDefault(),否则 returns 通常会允许正常的表单提交。

这对于远程验证是不可能的,因为 AJAX 是异步的。它不等待响应,所以它总是阻止正常的表单提交。收到 AJAX 响应后,它使用 Javascript form.submit() 提交表单。

当使用 Javascript 提交表单时,浏览器不知道触发原始提交的按钮,因此它不会包含在 POST 数据中。