【问题标题】:Clear Form after submit to iframe提交到 iframe 后清除表单
【发布时间】:2014-09-13 13:43:57
【问题描述】:

我有需要提交到另一个域的表单,如下所示:

<form id="myform" action="https://example.com" target="myiframe" method="POST">

   <input type="text" name="email" value="">
   <input type="text" name="name" value="">
   <input type="text" name="phone" value="">
   <input type="submit" name="submit" value="Submit">

</form>

和 iframe:

<iframe style="display:none;" name="myiframe" src=""></iframe>

这项工作正常,但在提交表单后它保持填写状态。 那么,提交后如何清除(重置)表单?

【问题讨论】:

标签: javascript html forms iframe


【解决方案1】:

您可以通过

使用 jQuery 轻松实现此目的
$("#formId").reset();

希望这会有所帮助...

【讨论】:

  • 由于 reset 是原生 FormElement 方法,您首先需要丢失包装该表单的 jQuery 对象,即 $('#formId')[0].reset();
【解决方案2】:

This solution 适用于您的问题

// code from answer with bind() transfered to plain javascript
function SubmitWithCallback(form, frame, successFunction) {
   var callback = function () {
       if(successFunction)
           successFunction();
       frame.removeEventListener('load', callback, false);
   };

   frame.addEventListener('load', callback, false);
   form.submit();
}

【讨论】:

  • 据我了解,提交功能是同步的。它会先提交然后清除。返回 false 将防止发生多次提交。我可能是错的,但我不这么认为
  • @user3654631 - 我找到了一个简单的解决方案,可以满足您的期望。函数 bind() 只需要从 jQuery 转移到纯 javascript 作为事件处理程序
  • @user3654631 - 我更新为纯 javascript 并从我之前的尝试中删除了垃圾。实施将需要 onsubmit="SubmitWithCallback(document.myform, document.getElementById("myiframe"), this.clear);"假设您将 iframe 更改为具有 myiframe 的 id
【解决方案3】:

使用event-listener 触发提交和清除。

首先,将提交按钮更改为具有适当 id 的常规按钮(您应该对其他元素执行相同操作):

<input type="button" name="submitButton" id="submitButton" value="Submit" />

然后使用 JavaScript 将事件监听器绑定到按钮:

<script type="text/javascript">
    document.getElementById('submitButton').addEventListener('click', function ()
    {
        handleTheForm;
    }, false);
</script>

handleTheform 是一个方法,相应地定义:

<script type="text/javascript">
    function handleTheForm()
    {
        document.forms[0].submit(); // Submit the form.
        document.forms[0].reset(); // Clear the form.
    }
</script>

编辑要处理 Enter 按钮,只需为按钮添加事件侦听器并检查按下的是哪个键:

<script type="text/javascript">
    document.addEventListener('keypress', function (e)
    {
        var key = e.which || e.keyCode;
        var enterKey = 13;
        if (key == enterKey)
        {
            handleTheForm;
        }
    });
</script>

您的最终图片应如下所示:

<form id="myform" action="https://example.com" target="myiframe" method="POST">
  <input type="text" name="email" id="email" value="" />
  <input type="text" name="name" id="name" value="" />
  <input type="text" name="phone" id="phone" value="" />
  <input type="button" name="submitButton" id="submitButton" value="Submit" />
</form>

<script type="text/javascript">
    function handleTheForm()
    {
        document.forms[0].submit(); // Submit the form.
        document.forms[0].reset(); // Clear the form.
    }

    document.getElementById('submitButton').addEventListener('click', function ()
    {
        handleTheForm;
    }, false);
    document.addEventListener('keypress', function (e)
    {
        var key = e.which || e.keyCode;
        var enterKey = 13;
        if (key == enterKey)
        {
            handleTheForm;
        }
    });
</script>

您可能需要每周做一些事情,但因为我还没有设法对此进行测试。

【讨论】:

  • 好的。检查我编辑的答案。
  • 是的,我在考虑这个,但是我不能做重定向,因为这个 url 用于从一堆地方获取帖子数据,并且必须像现在这样。
  • 我将概念更改为更适合您的解决方案。
  • 是的,这个 onclick 方法会起作用。我试过这个并且它有效,但问题是当有人点击“输入”时表单将不起作用
  • 按钮有一个特殊的事件监听器案例。看看我的编辑。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多