带有confirm()的document.form.submit()

时间:2014-01-13 19:41:48

标签: javascript forms confirm

我已使用confirm()事件处理程序成功使用了JavaScript onClick

<input type="submit" onClick="return confirm(....);" />

我还使用confirm

成功使用了onSubmit
<form onSubmit="return confirm(....);">

现在我的问题是,有一个特定的情况,我想通过不点击而只是使用document.myform.submit()来提交表单,但是当我这样做时,它似乎绕过了onSubmit事件中的确认。 / p>

如何将document.whateverform.submit()与confirm()一起使用?

1 个答案:

答案 0 :(得分:1)

当用户执行触发状态更改的操作时会触发事件。当直接通过JavaScript调用.submit函数时,浏览器不能让onsubmit处理程序运行。想想这样的代码会发生什么:

<form onsubmit="if(someCondition) { this.submit(); }">
...
</form>

如果事件是从javascript驱动的提交中触发的,那将触发无限循环,因为onsubmit调用submit,调用onsubmit,等等。我知道有些人可能会怀疑这是不是一个好的模式,但我已经看过了。

你应该避免直接调用form.submit并将它们替换为对同一函数的调用,如下所示:

function confirmFormSubmission() {
  return confirm('Are you sure you want to do this?');
}

function submitForm(f) {
  if (confirmFormSubmission()) {
    f.submit();
  }
}

...

<form onsubmit="return confirmFormSubmission()">
....
</form>

JavaScript代码中调用form.submit的任何地方,将其替换为对commitForm的调用,以确保其一致地工作。