【问题标题】:form.submit triggers onsubmit but does not submitform.submit 触发 onsubmit 但不提交
【发布时间】:2012-07-09 17:43:21
【问题描述】:

表格

<form onsubmit="OnSubmitForm();" action="<?php echo base_url(); ?>" method="post" autocomplete="off" name="register_form" id="register_form">

提交按钮

<input id="register_submit" name="submit" class="medium" type="submit" value="Submit" onclick="document.pressed=this.value"/>

提交链接

<a href="javascript: Submit();">full registration</a>

Javascript/jQuery

function OnSubmitForm()
{
  if(document.pressed == 'Full registration')
  {
      alert('full');
    document.register_form.action ="<?php echo base_url(); ?>account/register";
  }
  else
  if(document.pressed == 'Submit')
  {
      alert('light');
   document.register_form.action ="<?php echo base_url(); ?>account/register_light";
  }
}

function Submit()
{
    document.pressed = 'Full registration';

    $('#register_form').submit();
}

如果单击提交按钮,则会触发“light”警报,并且表单会按原样提交到“account/register_light”。

但是,如果点击链接,则会触发“完整”警报,但不会提交表单。更多点击链接不会触发警报或提交表单。

如果在单击链接后单击提交按钮,则表单将提交到“帐户/注册”(无警报)。 Whitch 是我希望链接提交表单的地方,而不是提交按钮通常提交表单的地方。

为什么 .submit() 不提交表单? 我在这里很困惑,任何对正在发生的事情的见解都将不胜感激。

【问题讨论】:

  • 如果您使用 jQuery,您应该真正考虑使用 jQuery 来绑定您的事件处理程序。内联事件处理程序声明(onsubmitonclick 等),更糟糕的是,在锚点的 href 属性中使用 javascript 已经过时了,而且会合并内容和功能。
  • 以防我下面的答案不起作用,您可能需要在函数结束之前提醒document.register_form.action 以查看它实际包含的内容。 (只是要仔细检查它是否符合您的期望。
  • 另外我相信内联 javascript 被 W3C 贬低,而不是在 HTML 中,而是在纯 XML 中,我可能错了,但我很确定它仍然支持 HTML(可能不是 5)但不支持 XHTML(这表明仅使用外部脚本)。我不是网络开发人员,只是软件,所以我可能错过了一些关于内联 javascript 的内容,但据我所知,在 HTML 中使用内联 javascript 并没有错。
  • 啊,不好意思,我误读了你的问题 :)。
  • @AnthonyGrist 我最初没有使用 jQuery。我只是看看我是否得到了与 document.register_form.submit() 不同的结果。我一知道有什么问题就清理它。

标签: javascript jquery html


【解决方案1】:

我第一次回答时误读了你的问题。

无论如何,您的表单未提交的原因,或者至少不是您期望的方式,据我所知,浏览器不会触发 onsubmit 方法,除非用户调用了提交。使用.submit() 不会导致它触发。

一种解决方法(希望这应该有效)是将您的提交功能更改为以下内容。

function Submit()
{
    document.pressed = 'Full registration';
    OnSubmitForm();
    $('#register_form').submit();
}

我也不确定设置document.pressed,你可能无法做到这一点。如果没有,那么您始终可以将参数传递给 OnSubmitForm 函数。

【讨论】:

  • 没有帮助(已测试)。我的问题是表单实际上并没有提交。 OnSubmitForm() 确实会触发(至少在我第一次按下链接时)。随着您的更改,它会被调用两次。 (documetn.pressed 被设置)
  • 那我和你一样困惑。是否有任何其他代码可能会干扰?我看不出会有,但这是一个远景。
  • 我有一些验证代码,但我尝试将其注释掉。没有改变任何东西(除了删除验证)。
猜你喜欢
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 2019-11-08
  • 2011-04-02
  • 1970-01-01
  • 2011-11-25
相关资源
最近更新 更多