标签:html js
jquery hashMap是一个监听浏览器hash的改变,更具hash的改变进行对应的处理的插件。
读了事件加载的源码才理解了其中的缘故,这之间踩过一些坑,写下来希望能帮到之后用它的人。
主要的原理是监听浏览器的hashchange事件然后将事件进行分发,利用ajax处理事物的一种机制,最近项目用到了这个插件,我们的项目用到了jqeury的ajax update进行异步的加载页面并把页面的内同append到对应的区域中去,起先我以为是ajaxUpdate加载页面时把页面的js反复的加载导致我的页面出现触发两次事件,所以再进行该页面的下一步操作的时候会发现所有的方法都对应到了一个dom层,如果是提交表单会同时提交好多次。并且此时后台返回的数据也会出现异常。
关于hashchange添加hash参数的时候,原来的代码是这么写的:
$..= (options) { = ; = .; (Object...(options) === ) { (== ) { .= Array(); (= options.- ; >= ; --) { ..(options[]); ..(, [options[]]); } } { (= options.- ; >= ; --) { = ; () { ([].== options[].) { .(+options[].); = ; } } (!){ ..(options[]); ..(, [options[]]); } } } ; } (){ (== ){ .= Array(); ..(); } ..(, ) }; };
$..= (options) { = ; = .; (Object...(options) === ) { (= options.- ; >= ; --) { ..(, [options[]]); } } ; } ..(, ); };
原来他再添加hash参数的时候并不会进行排重,所以加了很多的hash参数,然后就会导致触发一个事件的时候,触发很多次方法 $..= (options) { = ; = .; (Object...(options) === ) { (== ) { .= Array(); (= options.- ; >= ; --) { ..(options[]); ..(, [options[]]); } } { (= options.- ; >= ; --) { = ; () { ([].== options[].) { .(+options[].); = ; } } (!){ ..(options[]); ..(, [options[]]); } } } ; } (){ (== ){ .= Array(); ..(); } ..(, ) }; };
$..= (options) { = ; = .; (Object...(options) === ) { (== ) { .= Array(); (= options.- ; >= ; --) { ..(options[]); ..(, [options[]]); } } { (= options.- ; >= ; --) { = ; () { ([].== options[].) { .(+options[].); = ; } } (!){ ..(options[]); ..(, [options[]]); } } } ; } (){ (== ){ .= Array(); ..(); } ..(, ) }; };
关于jquery hashMap反复添加hash之后造成多次请求的bug
标签:html js
原文地址:http://snaile.blog.51cto.com/8061810/1716906