【问题标题】:jQuery-validate: Using remote hides button?jQuery-validate:使用远程隐藏按钮?
【发布时间】:2016-09-26 23:44:58
【问题描述】:

当我使用jQuery Validation Plugin 中的remote method 并按下提交按钮时,$_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` 数组中。

我在这里做错了吗?

【问题讨论】:

  • 当使用 Javascript 而不是通过单击按钮的默认操作提交表单时,POST 数据中不包含按钮。
  • @Barmar 哦。我想我在第一句话中遗漏了一些东西:“当我添加远程方法然后按提交,然后......我会更新我的问题。
  • 我意识到,我删除了我之前的评论。
  • 那么当我使用remote方法时,表单是通过Javascript提交的,而当我不使用remote方法时,表单是正常提交​​的?

标签: php jquery html jquery-validate


【解决方案1】:

当使用本地验证方法时,jquery-validate在验证失败时调用event.preventDefault(),否则正常返回以允许进行正常的表单提交。

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

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

【讨论】:

  • 谢谢,现在明白了。因为我需要知道点击了哪个按钮,所以我使用了这个丑陋的解决方法:$('#mybutton').click(function(){ $(this).before("&lt;input type='hidden' name='mybutton' value='3'&gt;"); })
  • 我建议你把隐藏的输入放到普通的HTML中,然后用$("#whichbutton").val(3)
  • 还有另外一件事使这种行为更难发现:如果在字段中键入时使用了远程功能,则会再次发生正常的表单提交。
  • 对。它知道它不需要重做验证。
  • 我想我今天花了大约 5 个小时来解决这个问题,我几乎失去了理智,因为有时会显示按钮名称,有时不会。我很高兴你能向我解释这个!谢谢!!
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2016-07-16
相关资源
最近更新 更多