js或jQuery无法提交表单问题(formObj.submit()无响应)

问题背景

HTML代码如下:

2015-04-23_12-16-41.png

js代码如下:

2015-04-23_12-18-09.png

 意图通过js提交表单,却发现表单实际根本没有提交,IE下提示“Uncaught TypeError: Property ‘submit’ of object # is not a function”。

原因分析

页面中有表单元素”name=’submit'”,$(‘#testForm’).submit();被执行的时候,会定位到该元素,然后导致实际无法提交表单。

问题解决

 将表单中name=”submit”或者id=”submit改成name=“****”、id=”****”,****处注意不要和表单事件名称、表单默认属性名称相同

在线Demo:http://jsfiddle.net/4xk2kqpo/

下载Google浏览器(Google Chrome)离线安装包方法

  由于某些河蟹原因和Chrome自动更新容易更新失败,提示“ 更新失败(错误:7)检查更新时出错:糟糕!安装失败,请重试。错误代码:0x00000000。”等等各种原因,没办法直接更新。刚好Google Chrome又号称是浏览器界的版本帝,更新很快,截止到目前最新版本号为:42.0.2311.90。解决更新问题,办法很简单,重新安装即可(不用卸载,安装后之前的设置也都在),那么问题来了,哪里下载呢?

1、通过电脑管家、360之类的自带软件管理搜索Google浏览器更新,缺点:更新可能会比官方慢一些

2、访问官方网站下载

 这里重点解释第二种方法,Google Chrome为了保证每次下载都是下载最新版本,默认下载的都是在线安装包,打开安装,会联网下载最新版。由于“网络”原因,中国用户基本都是下载失败,其实官方也想到了这点问题,也有相应的离线版本。访问:

http://www.google.com/chrome/eula.html?standalone=1 

http://www.google.cn/chrome/eula.html?standalone=1 

选择下载,即是最新离线安装包,比默认地址就是多了一个“standalone=1”。直接访问中文下载页可访问:

http://www.google.com/chrome/eula.html?hl=zh-CN&standalone=1

3、从网盘下载,下载地址在文章最后,会保持更新

更新失败截图:

2015-04-15_11-51-09.png

重新安装更新后截图:

2015-04-15_13-09-32.png

2015-6-25 更新

以上贴的地址都为Chrome32位离线安装包下载,下面的地址为chrome64位离线安装包下载地址:

http://www.google.com/chrome/eula.html?standalone=1&platform=win64

http://www.google.cn/chrome/eula.html?standalone=1&platform=win64

64位支持Windows 7 Windows 8,建议电脑性能比较好的童鞋采用此版本

由于某些网络原因可能,上面的链接也没法下载chrome,特上传网盘,供下载。

说明:

其中:

ChromeStandaloneSetup64.exe 为 Windows 8/7 64-bit chrome离线安装包

ChromeStandaloneSetup.exe  为 Windows 8/7/Vista/XP 32-bit chrome离线安装包

亲测可用,安装完版本:43.0.2357.130 

搞不清楚自己系统是64位还是32位的童鞋,还是下载32位的好,非64位系统,无法安装64位chrome

2015-7-22 更新

 安装包,都是自己下下来,然后上传到网盘,原有网盘上传速度太慢,换用新网盘

链接:http://yunpan.cn/ccW3khgCNudM3 密码:4a0f

—————————- 分割线————————————

网盘下载更新日期:2015.9.2 

版本:45.0.2454.85 

propertychange ie7、8下报错“Stack overflow in line 0″

  propertychange 是ie独有事件,存在于ie7、8

  使用背景:

  1、ie7、8下radio和checkbox选中并不会触发change事件,只有表单元素失去焦点才会触发

  2、及时监听文本框输入,统计字数、自动完成、输入提示等等

  实例代码

  html代码

2015-04-08_10-12-20.png

  JavaScript

2015-04-08_10-12-55.png

 上图所示代码中给元素绑定propertychange事件,处理过程中修改属性,也会触发元素propertychange事件,然后就死循环,抛出“Stack overflow in line xx”错误

 解决办法:

1、慎用propertychange事件,上面第一种情况,可以通过click事件替代

2、确实需要用到propertychange事件,不要在事件处理中修改元素本身

在线demohttp://jsfiddle.net/7q4fupja/

关于表单get还是post好的一点研究

get和post的区别,这里就不介绍了。
在项目里边,对数据的操作,归根到底,就是增删改查。
对这四种操作,表单应该使用何种提交方式,说明如下:
新增和修改:都会涉及到数据量比较大、且要求保密,选用post。
删除:建议采用post,也可采用get提交。服务端获取到数据,删除之前,做好安全验证。
查询:使用get,查询时采用post,查询到数据之后,做一些操作,跳转链接了,这时候想回退到查询出数据的页面,浏览器就会提示页面已过期,是没法回退到查询结果页面的。这对于,用户操作友好性来说,是不太好的。
表单使用get提交,会把表单数据附加到url上,采用的是“application/x-www-form-urlencoded”对url进行转码,当前页面使用的何种编码,浏览器就会采用何种编码对url进行转码。
处理url时,当字符里面含有空格时,浏览器会自动替换为“20%”。

关于urlencode对保留字符的处理,请参考下图

f551b4f9e81c7e4e6c22eb1b.jpg23c4fb4e20e7e4a1d62afce4.jpg

参考资料:

http://en.wikipedia.org/wiki/POST_(HTTP)

http://en.wikipedia.org/wiki/URL_encoding

http://en.wikipedia.org/wiki/GET_(HTTP)#Request_methods