这是我表单的一部分:
<form name='form-main' onsubmit='return validate()' action='' method='post'>
<center><input type='submit' onClick='this.disabled=true; this.form.submit();' value='I accept - Download the GM!'/></center>
</form>
这是validate
函数:
function validate()
{
// this is just to test if it actually shows
alert('You must not leave any of the fields blank!');
return false;
}
每当我点击提交按钮,没有任何反应,页面只是重新加载..我希望它显示警告对话框。
答案 0 :(得分:22)
当您调用表单的submit
函数时,不会触发submit
事件。 This is by design,假设如果您从代码触发提交,则您已经完成了任何必要的验证。 (请注意,对于HTMLFormElement#submit
函数来说,这是正确的;它周围的包装器库不必然是正确的。)
在您的示例中,我将删除按钮上的click
处理程序。这是一个提交按钮,所以只需在表单上的submit
事件中放入任何相关逻辑。或者,如果您愿意,可以将validate()
作为按钮click
的一部分来呼叫。
答案 1 :(得分:8)
您可以覆盖原始的“提交”方法,如下所示:
HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
HTMLFormElement.prototype.submit = function (){
this._submit();
alert('Deddy Is Great :)'); // or fire the onsubmit event manually
};
答案 2 :(得分:2)
提交按钮的onclick事件在表单的onsubmit事件之前立即触发,这会禁止后续事件传播和触发,这会导致validate函数永远不会被触发。您可以看到,这是从代码示例中删除this.disabled=true;
。
根据docs at W3:
禁用的表单控件必须阻止任何单击事件 在调度的用户交互任务源上排队 元素。
您应该从提交按钮中删除点击事件代码,只需让该功能执行您需要它执行的操作,包括禁用该按钮。例如:
function validate() {
// this is just to test if it actually shows
document.getElementById('sub').disabled=true;
alert('You must not leave any of the fields blank!');
return false;
}
<强> jsFiddle example 强>