最近在开发中经常使用javascript和jquery,在开发过程中一些小问题往往会影响开发效率。今天就来总结一下:

1、关于window.location.href无法跳转的问题:

当时的需求:使用form表单上传文件,上传成功后跳转到另外一个页面。

当时的思路:使用的AJAX向后台发送上传的文件数据,请求成功后使用location.href来实现页面跳转。

代码码好了,调试却出现问题了,文件提交成功了却无法跳转页面,看脚本逻辑没错啊。。。所以小问题让人一下摸不清头脑。这个时候好好研究laoction.href和form的用法就很有必要。

解决思路:form表单有默认提交事件,尤其在与AJAX一起使用的时候,就会出现阻塞问题。ajax执行与form表单执行存在先后顺序问题。点击提交按钮,ajax如果是同步,submit提交执行事件被挂起,等待ajax结束后再执行。即如果你在ajax的回调函数(如:success)中写了document.location.href='xxx.html',它是执行了,的确是去执行了跳转的,于是ajax完成了,那接下来就要把刚才的submit提交的请求完成。于是又会从xxx.html页面跳回原来那个页面(无论你submit有没有提交具体的数据,总之提交了之后如果后台没有执行跳转/重定向,它就要回到原来的页面。)。在ajax提交过程完成后,form会发起正常的提交流程,所以导致无法进行正常的跳转。

总结一下:ajax成功后确实实现了由A页面到B页面的跳转,form表单在点击提交的时候会自己提交并刷新当前页面,尽管,你可能并没有写action的路径。但是由于submit这种类型的特殊性,又让B页面跳回了A页面,由于这个ajax执行完再执行submit请求的过程处理的很快,你会感到好像没有效果,但是你仔细观察,会发现这个过程页面会刷新的,其实就是B页面跳回到A页面。

具体解决方法:1、直接将按钮类型由submit改为button类型,即type=button。在表单中即使使用button标签,也要写上button类型为type=button。如果不指明就默认为submit类型。

                         2、在ajax结束后阻止form的下一步提交,就能正常进行跳转了。提交表单方法里阻止表单提交操作:return false;或者event.preventDefault() //阻止form表单默认提交。

2、a标签自动点击事件如何实现?

需求:后台返回一个页面的接口地址,前端能自动打开此链接;

本以为这个功能很简单,以为可以直接在页面初始化的时候给a标签添加click事件就行了。$('a').click()但在实际操作中却无效。

解决思路:a标签点击事件实际点击的是里面的文字,如果单纯的给a标签添加点击事件是无效的,对a标签的自动点击实际上是对a标签内的行内元素进行自动触发。这里就要获取文字对象,$(“a”)[0]是一个object对象,或许说是DOM对象更贴切一些。这样就获得文字对象,然后再执行$(“a”)[0].click()就有效了。或者直接使用原生js方法:document.getElementById("a").click();

 3、js中数组push对象,前面的值总是被最后一次的值覆盖的问题

var json = { top: '400px', width: '500px', height: '300px' };
var data = {};//在外面定义对象
var datas = [];
for (key in json) {
 data.name = key;
 datas.push(data);
}
console.log(datas)

结果为:

jquery打开一个地址_jquery打开一个地址

 

 原因:

jquery打开一个地址_ViewUI_02

 

 解决方法:每次循环的时候,新建一个对象

var json = { top: '400px', width: '500px', height: '300px' };
var datas = [];
for (key in json) {
 var data = {};//每次循环的时候,新建对象
 data.name = key;
 datas.push(data);
}
console.log(datas)

jquery打开一个地址_javascript_03

 

 最后结果为:

jquery打开一个地址_jquery打开一个地址_04