【问题标题】:Submit button submits the wrong form提交按钮提交错误的表单
【发布时间】:2014-11-12 19:35:55
【问题描述】:

我在同一页面上有两个表单,如下所示:

<section class="login_column box" >

    <h3>For patients:</h3>

    <form id="patients_form" name="patients_form" action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="POST">

    <fieldset>

        <p><label for="patient_login">Email:</label><input type="text" id="patient_login" name="patient_login" placeholder="Email" value="" required></p>

        <p><label for="patient_password">Password:</label><input type="password" id="patient_password" name="patient_password" placeholder="Password" value="" required></p>

        <p><label></label><button id="patients" style="margin-top:17px;" name="patients" type="submit">&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;</button></p>

    </fieldset>

    </form>

</section>


<section class="login_column box">

    <h3>For physicians:</h3>

    <form id="physicians_form" name="physicians_form" action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="POST">

    <fieldset>

        <p><label for="physician_login">Email:</label><input type="text" id="physician_login" name="physician_login" placeholder="Email" value="" required></p>

        <p><label for="physician_password">Password:</label><input type="password" id="physician_password" name="physician_password" placeholder="Password" value="" required></p>

        <p><label></label><button id="physicians" name="physicians" style="margin-top:17px;" value="Login" type="submit">&nbsp;&nbsp;&nbsp;Вход&nbsp;&nbsp;&nbsp;</button></p>

    </fieldset>

    </form>

</section>

当某些提交按钮被按下时,第一个表单被提交,即使第二个提交按钮可能被按下。如何保证每个提交按钮只提交自己的表单?

【问题讨论】:

  • 您有实时网址吗?还是我们可以看看的Demo?这可能会有很大帮助。
  • 是的,我有,但它是西里尔文。希望不会有问题。 scanner.strangerstudio.net/…

标签: form-submit forms


【解决方案1】:

因此,默认情况下,无类型的button 或带有type="button/submit"input 将提交任何和所有祖先form(s)。如果您错过了结束&lt;/form&gt;,浏览器可能会对结束的时间感到困惑。您编写它的方式看起来应该可以正常工作,但是...

我头疼的一件事是在我的 CMS 上使用单一形式的 .NET 设置,它将整个页面包装成一个大表单。 CMS 随后会删除我可能手动放入的任何&lt;form&gt; 标签,并且任何button/input 点击都会提交页面表单。也许你有一些这样的 CMS 问题?

编辑:

所以查看了您的代码...似乎正在提交正确的表单:

$('#physicians_form').on('submit',function(){ console.log('physicians'); });
$('#patients_form').on('submit',function(){ console.log('patients'); });

他们正确记录。正确的表单正在提交,但您的validate.js 似乎只验证第一个表单,无论提交哪个表单...我不熟悉validate.js 插件,但也许有一种方法可以指定哪个按钮应该验证哪个表单?

【讨论】:

  • 当我选择“查看页面源代码”时,一切看起来都很好。没有缺少标签,代码与我的帖子中的 PHP 解释完全相同。
【解决方案2】:

这是一个常见问题,有两种简单的方法可以解决。

  1. 将按钮放在表单中。大多数人都这样做,但如果你不这样做,它可能会提交页面上的第一个表单。确保您的&lt;input type= 是提交,而不是按钮。

  2. 使用这样的按钮,&lt;input type="button" onclick="document.forms[1].submit()"/&gt; 将提交页面上的第二个表单。请记住,JS 从 0 开始计数。使用 document.forms[0].submit() 将提交第一个表单。

希望这会有所帮助!

【讨论】:

  • 您是什么意思“将按钮放在表单中”?我可以让它与 JavaScript 一起工作,但我不明白为什么这不起作用。
  • 我看到你使用了&lt;button&gt; HTML 标签。尝试同样的事情,但像这样:&lt;input id="patients" style="margin-top:17px;" name="patients" type="submit"/&gt;.
  • 刚试过。同样的结果。这里有别的东西。 :)
猜你喜欢
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 2013-01-09
  • 2011-10-23
相关资源
最近更新 更多