js事件代理初步

      js里我们要做事件一般要给目标元素绑定事件就行了,但是点击事件的过程会冒泡,具体过程看犀牛书,蝴蝶书去,就是说会一层一层上升到点击元素的父级,直到body,利用这个就出现的事件代理,如果你想给一票li附上click事件,你可以给他外层的ul附上,然后通过冒泡,用程序判断你到底点击的是哪一个,从而进行相应的操作,由于只绑定了一个元素的事件,所以在性能上肯定有所提高吧,废话不多说,直接上例子:

 <ul id="nav">
                 <li>嘻嘻 俺是第一个</li>
                 <li>俺反正不是最后一个</li>
                 <li>啊 俺是最后一个</li>
 </ul> 

js代码:

              var uls = document.getElementById("nav");
			uls.onclick = function(){
				var e = arguments[0] || window.event,
					target = e.srcElement || e.target;
				alert(target.innerHTML)
			}

    其中做了一些对ie事件以及当前目标的兼容,但是如果你的ul够大 的话 点击空白处会弹出全部li ,所以我们需要稍微改动一下下:

                       var uls = document.getElementById("nav");
			uls.onclick = function(){
				var e = arguments[0] || window.event,
					target = e.srcElement || e.target;
                             "LI" === target.tagName &&  alert(target.innerHTML)
				
			}

记得标签是大写,如果你不喜欢大写的话可以用一个方法转换成小写好像叫toLowerCase() 我忘了 反正我也不经常用 呵呵 ,好了 基本上应该算是完了,但是我还有一点疑问,就是如何获得当前元素的索引值,啊 总不能在标签上写1234吧 反正我是不会,貌似这个没法获取,改天再研究一下,对了忘了jq了 在jq下更简单 直接 var $t = $(e.target); $t.is(“li”)  && alert($t.html()) 对了 这个&&相当于if($t.is(“li”) 这样写还更快点只是失去的代码的可读性,但是你如果用googel 的那个Closure Compiler的话普通的if会自动转换为&&的,呵呵 有好处有坏处吧 ,好了 今天就这样了,一看表又不早了  明天周五,哈哈 又该休息了 睡觉!

posted @ 2011-04-14 23:03    Views(265)  Comments(0)    收藏  举报