form表单通常由type="submit"的按钮触发,从点击到提交表单,要经历下面两个方法:
- onsubmit();
- submit();
有的网页因某些原因,放弃了标准的按钮、用type="button"的按钮代替,然后再手动触发submit(),如下:
<input type="button" value="提交" οnclick="document.form.submit();" />
这时候,问题产生了,因为onsubmit()里的程序将不被执行!在DHTML手册里,多次提到了二者的关系:
submit Method 说明 写道
The submit method does not invoke the onsubmit event handler. Call the onsubmit event handler directly. When using Microsoft® Internet Explorer 5.5 and later, you can call the fireEvent method with a value of onsubmit in the sEvent parameter.
所以,解决办法就是:在submit()之前,先手动触发onsubmit事件,请下面的完整代码(引用了jquery):
<html>
<head>
<script src="jquery-1.3.2.min.js"></script>
</head>
<body>
<form id="myform" action='/Personinfo/infoAction' method='post' name='Users_form' >
生日:<input type='text' name="obj_Users[birth]" value='1971-01-01' />
<input type='button' value='更新个人资料' οnclick="foo();" />
</form>
</body>
</html>
<script language=javascript>
//监听obsubmit事件
$(window).load(function(){
$("#myform").bind("submit", function() { alert('现在执行 onsubmit 事件!'); return false;})
});
function foo(){
var result = false;
//IE fire event
form = document.Users_form;
if (form.fireEvent) {
result = form.fireEvent('onsubmit');
//DOM2 fire event
} else if (document.createEvent) {
var ev = document.createEvent('HTMLEvents');
ev.initEvent('submit', false, true);
result = form.dispatchEvent(ev);
}
if(result) {document.Users_form.submit();}
}
</script>