问题:
在JS文件中,使用fire手动调用,执行符合匹配的 dom 节点的相应事件的事件处理器(并冒泡)和默认行为,
有时候会出现这样的问题:事件明明已经定义有了,但是浏览器在解析JS文件时却找不对应事件,以至于无法触发指定事件,得不到相应的页面效果。
例如:在一个JS文件中,代码如下:
……//(省略n行代码)
Event.fire("#more","click");//预想在浏览器第一次解析改JS文件时,触发该事件
……//(再省略n行代码)
Event.on("#more","click",function(obj){ //在此定义对应事件处理
……//(再省略n行代码)
});
这样就会出现一个问题,页面刷新进去时,本来预想是要触发下面的事件的,但是结果却不是如此。
原因:
浏览器解析JS文件时,在同一个代码块中从上到下解析处理(此处不讨论异步处理),如果将事件定义放在后面,而又在事件定义前用fire触发事件,就会因为浏览器还没有解析到对应事件的定义而得不到预期的触发事件的效果。
解决:
1.可将事件定义放在代码块的前面,避免需要触发事件找不到对应事件;
2.可将事件定义包在function里,需要触发事件前调用对应function即可。
像这样:
showmore();//默认触发showmore事件
function showmore(){
Event.on("#showmore","click",function(obj){
……//(省略n行代码)
closeshowmore();
});
}
function closeshowmore(){
Event.on("#closemore","click",function(obj){
……//(再省略n行代码)
showmore();
});
}
新手上路,如有错误的地方,欢迎各位指出,非常感谢!