为了您的幸福,请不要把提交按钮的name或者id设置为submit
为了你的幸福,请不要把提交按钮的name或者id设置为submit
IE整个家族都是如此的丑陋!
折磨了我好多天的问题,一直很不甘心啊,还以为jquery.validationEngine.js有问题,还在它基础上自己写了个验证框架。结果阴沟里翻船,载在这么一个傻逼的问题上。以下为转载:
关于Html form表单的提交,很容易。。。但如果不仔细还是能有很多错误。
提交的button name 属性为 submit form的submit方法失效 。代码如下
- <html>
- <head></head>
- <script type="text/javascript">
- function getData(){
- document.forms[0].submit();
- }
- </script>
- <body>
- <form id="form1" name="form1" method="get" action="http://xiayuanfeng.iteye.com">
- <input type="button" name="submit" onclick="getData();" value="提交">
- </form>
- </body>
- </html>
如果改为
- <html>
- <head></head>
- <script type="text/javascript" src="jquery.js"></script>
- <script type="text/javascript">
- function getData(){
- document.forms[0].submit();
- }
- </script>
- <body>
- <form id="form1" name="form1" method="get" action="http://xiayuanfeng.iteye.com">
- <input type="button" name="aa" onclick="getData();" value="提交">
- </form>
- </body>
- </html>
成功提交。。
我们来看看原因
- <html>
- <head></head>
- <script type="text/javascript" src="jquery.js"></script>
- <script type="text/javascript">
- function getData(){
- var objform = document.forms[0]
- for(var i in objform){
- if(i.indexOf("submit")!=-1){
- alert(i+" ="+objform[i]);
- }
- }
- }
- </script>
- <body>
- <form id="form1" name="form1" method="get" action="http://xiayuanfeng.iteye.com">
- <input type="text" name="aa">
- <input type="button" name="submit" onclick="getData();" value="提交">
- </form>
- </body>
- </html>
发现 submit已经变成 form 的一个属性了,并不是方法。这下明白了吧。把submit(也就是submit方法)覆盖了。所以要注意提交表单name的命名方式不要和form原有的方法,属性相同,这样会导致原来的form属性方法失效。
另外一篇,其实不只是IE:
这个不仅仅是IE6的错,而是所有IE的错!!
IE有一个特别随意的功能,就是能够通过Element的name来操作一个Element,有些人觉得这个功能很方便,实际它不仅不符合标准,还会导致IE自己变得莫名其妙。
假如你的Form有一个提交按钮的name="submit",那么,很遗憾,你这个form无论如何都不能通过Javascript来提交,只要你一调用了这个form的submit()方法,IE就会告诉你它不支持这个方法!这不是搞笑吗?哪个浏览器会不支持form的submit()方法?虽然IE不标准,也不至于这样吧?对不起,就是这样。
因为当你调用form的方法submit(),它首先想到的是你的提交按钮!
theForm.submit()
这个语句在IE看来并不是调用theForm的submit方法,而是调用了名字为submit的提交按钮!如果你在某个元素对象后面加个括号,会有什么效果?当然就是出错。在IE的独特视角下,上面这个语句与下面这个语句的效果一样:(theForm.submit)();
前一个括号代表了名称为submit的按钮对象,后面那个括号就无法理解了,所以IE告诉你不支持这个方法。IE整个家族都是如此的丑陋!