Javascript 我正在a'中使用appendChild;接触;表单在提交时打印一条漂亮的消息,但消息立即消失

Javascript 我正在a'中使用appendChild;接触;表单在提交时打印一条漂亮的消息,但消息立即消失,javascript,html,Javascript,Html,我正在制作一个非常基本的“联系我们”表单,我希望在表单验证成功后,页面上会出现一条“感谢您的反馈”消息(而不是提醒)。问题是,我点击了提交按钮,感谢信息出现了一瞬间,然后消失了 代码: 我做错了什么?我对javascript非常陌生。谢谢 调用addMessage()后,您将返回true,因此将显示消息,然后立即提交表单 如果要阻止立即提交表单,可以使用标准的alert()(它等待用户按OK按钮),也可以通过返回false,然后在用户阅读消息后单击某个按钮时调用form.submit()方法显式

我正在制作一个非常基本的“联系我们”表单,我希望在表单验证成功后,页面上会出现一条“感谢您的反馈”消息(而不是提醒)。问题是,我点击了提交按钮,感谢信息出现了一瞬间,然后消失了

代码:


我做错了什么?我对javascript非常陌生。谢谢

调用
addMessage()
后,您将返回
true
,因此将显示消息,然后立即提交表单

如果要阻止立即提交表单,可以使用标准的
alert()
(它等待用户按OK按钮),也可以通过返回false,然后在用户阅读消息后单击某个按钮时调用
form.submit()
方法显式提交表单来阻止表单提交


实际上,像“谢谢您的消息!”这样的消息应该显示在表单的
action
属性中指定的目标页面上,并在表单发送后加载。如果说表单尚未发送,就假定表单已发送,这不是一个好主意。

Firefox 15和IE 9都在提交表单之前更新DOM,所以我看不出这是一个问题。但是无论如何,您可以通过从setTimeout调用它来延迟提交,这样就几乎可以保证DOM将更新以显示消息,然后表单将被提交,例如

<script>
function validate(form) {

  var formValid = false;

  /* validatation stuff, set formValid to appropriate value, assume passed */

  formValid = true;

  if (formValid) {

    // Show message
    document.getElementById('message').style.display = '';

    // Delay submit until after message displayed
    setTimeout(function(){form.submit()}, 10);

    // Stop form submitting immediately
    return false;

  } else {

    /* form isn't valid, do whatever and cancel submission */
    return false;
  }
}
</script>

<span id="message" style="display: none">Success!!</span>
<form onsubmit="return validate(this);">
  <input type="text" name="foo" value="bar">
  <input type="submit">
</form>

函数验证(表单){
var formValid=false;
/*验证内容,将formValid设置为适当的值,假设已通过*/
formValid=true;
如果(格式有效){
//显示消息
document.getElementById('message').style.display='';
//将提交延迟到消息显示之后
setTimeout(函数(){form.submit()},10);
//立即停止提交表格
返回false;
}否则{
/*表单无效,请执行任何操作并取消提交*/
返回false;
}
}
成功!!
请注意,调用表单的submit方法不会分派sumbit事件,因此不会再次调用submit处理程序。这与DOM 2 HTML标准相反,但浏览器从来没有遵循过它


在新的“活动”HTML规范中对其进行了更改,因此,如果提交来自表单的提交方法,则不能发送提交事件。

因此,我无法让函数显示消息,然后返回true,而不使消息消失?我希望该消息在重新加载页面之前保持不变。表单提交本质上涉及加载另一个页面或重新加载同一页面(取决于表单的
操作
属性中指定的内容)。@Cam-该消息将在重新加载页面之前保持不变:。您的页面必须重新加载太快,您才能看到它。
<script>
function validate(form) {

  var formValid = false;

  /* validatation stuff, set formValid to appropriate value, assume passed */

  formValid = true;

  if (formValid) {

    // Show message
    document.getElementById('message').style.display = '';

    // Delay submit until after message displayed
    setTimeout(function(){form.submit()}, 10);

    // Stop form submitting immediately
    return false;

  } else {

    /* form isn't valid, do whatever and cancel submission */
    return false;
  }
}
</script>

<span id="message" style="display: none">Success!!</span>
<form onsubmit="return validate(this);">
  <input type="text" name="foo" value="bar">
  <input type="submit">
</form>