我的表单有onsubmit="checkform()"事件(校验表单),如果直接使用input的submit控件提交表单时这个事件会被触发。
代码改成通过input的button的onclick="submitForm('loginForm','login')"事件来动态提交表单后,如下代码(红色部分):
function submitForm(formName,eventName){
formId = document.getElementById(formName);
formId.action = 'common/P0101002-login.action';
formId.submit();
}
结果表单的onsubmit事件不执行了。难道这是js造成的?如果这样不能触发onsubmit事件,有没有什么变通的方法解决。
注意:我不希望在submitForm函数去执行checkform函数,因为sumitForm函数被封装成了全局js函数,而checkform是页面中的函数。
代码改成通过input的button的onclick="submitForm('loginForm','login')"事件来动态提交表单后,如下代码(红色部分):
function submitForm(formName,eventName){
formId = document.getElementById(formName);
formId.action = 'common/P0101002-login.action';
formId.submit();
}
结果表单的onsubmit事件不执行了。难道这是js造成的?如果这样不能触发onsubmit事件,有没有什么变通的方法解决。
注意:我不希望在submitForm函数去执行checkform函数,因为sumitForm函数被封装成了全局js函数,而checkform是页面中的函数。
解决方案 »
- 大家好,我想问一下我这个是什么灵异问题啊,关于myeclipse
- webRoot右键怎么创建不了jsp文件?
- 如何使用变量给javabean的成员变量赋值呢,而不是直接使用表单传过来的对应数据?
- 如何获取HTTP头的目的地址
- ResultSet.last()在大数据量是导致OutOfMemory
- 急求::jsp页面打印例子!!!(在线等,高分相送) thanks!!!!!!!!!!!
- 关于在eclipse中设置类路径的问题?(在线等)
- 如何在Redhat7.2下用系统的apache+Tomcat4进行配置
- 如何在tomcat中使用JavaBean啊?
- 我程序你帮调试一下好吗?在线等待
- Eclipse中使用struts
- html页面在不使用target属性的情况下如何在服务器端控制返回的响应页面是打开一个新页面而不是刷新原请求页面?(前提不使用客户端脚本如JS)
也就是说,虽然表单数据提交到服务器了,但是没有经过表单验证。
document.forms[0].action = 'common/P0101002-login.action';
document.forms[0].submit();}
但是你可以在CheckForm中执行SubmitFrom啊。
<input type=button value="" onclick="submitForm()">
</form>
<script language=javascript>
function submitForm(){
if(checkform()){
document.formname.action = 'common/P0101002-login.action';
document.formname.submit();
}else{
alert("sssss");
}
}
</script>
原址:http://hi.baidu.com/ystar/blog/item/b021cbfc10c036fefc037f21.html
官方的解释是这样的:
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事件,你可以直接调用onsubmit事件。如果使用的是微软5.5及以后版本,你还可以使用firEvent方法将onsubmit方法作为一个参数值来调用。根据上面的解释修正源代码如下(注意红色代码部分):
function submitForm(formName, eventName){
var formId = document.getElementById(formName);
if(formId.fireEvent('onsubmit')){ formId.action = formId.action.replace(".", "_" + eventName + ".");
formId.submit();
}
}搞定,谢谢加菲鱼。不过上面的写法当浏览版本较低或非IE时可能会有一些问题,如果有朋友愿意测试一下不胜感激,分一定会给。
另外有朋友可能会说为什么不直接调用ousubmit()事件,如下:
function submitForm(formName, eventName){
var formId = document.getElementById(formName);
if(formId.onsubmit()){ formId.action = formId.action.replace(".", "_" + eventName + ".");
formId.submit();
}
}
这个我试过了,但这种写法要求form标签中必须书写onsubmit事件代码,否则会报错。
但并不是所有form必需书写onsubmit代码,所以这种写法不论form是否需要校验都必须加上onsubmit事件,造成不必要的垃圾代码。
但fireEvent方法就没有这个问题。
有兴趣的朋友可以继续研究一下,有结果了大家分享一下,谢谢!