ie和ff关于form提交的js代码兼容性 收藏
2009年11月27日





先描述问题:过去写了一个form,因为作用是上传几张照片,所以必须用form,里面带几个文件选择框。由于上传之前想先在客户端做些判断,譬如提交的是不是图片啊、大小如何啊之类的,所以写了个提交按钮的onclick事件调用的函数,函数里在一堆判断通过后有一句

document.formName.submit();

嗯,这里都还好。调试的时候似乎通过了的,不过后来有好久没关注了,不知道有没有改动。

今天测试,发现问题。ie下一切顺利,ff下无反应。观察:ie下提交,服务端tomcat有对应的提示出来;ff提交没有提示。说明第一不是 tomcat的问题,第二没有传到tomcat这里来。然后打开apache的log文件,真tnnd大啊……看样子也没问题啊,最重要的是……似乎ff 下也没到apache这里来。

于是可以确认在客户端就给阻止了。看js。在上面那句submit的前面加一个alert(),后面也加个alert(),运行……我顶你个肺啊,居然都出现了。说明ff下js语句仍然执行经过了这个submit,但是没执行,或者执行了没效果。与此同时,ie可以悠哉游哉的正常执行。

然后我跟wc同学反复翻那个ftl文件和js文件,翻来覆去的看,几乎快看出屏幕上每个点了,还是没有头绪。zjb同学适时的出现,然后开始修改,先是改成

document.forms["style_form"].submit();

外甥打灯笼。加了一个alert查看是否取到了这个form,外甥继续打灯笼。于是三个人都开始仔细看屏幕的每个点。我说,要不要试试让那个提交的按钮直接提交表单,不经过js的处理了。正要改,zjb说诶你这个按钮的type怎么是submit啊,同时敲打键盘,改成了button。真神奇,外甥的灯笼灭了!

最后探讨结果:一个form的提交按钮,如果按钮的type是submit,那么js函数必须要return true,onclick事件也要写成onclick="return jsFunctionName()"之类的,不加那个return的话ff就不会真的提交表单;如果那个js函数没有返回boolean,那就把按钮的类型改成button吧,可以骗过ff。相比之下ie在这个时候兼容性强一点。

 

本文永久链接: http://www.zzxj.net/blog/fxs_2008/archive/2009/11/27/96.html

发表于 @ 2009年11月27日 |评论(loading... )|收藏

发表评论 姓  名: