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会自动转换为&&的,呵呵 有好处有坏处吧 ,好了 今天就这样了,一看表又不早了 明天周五,哈哈 又该休息了 睡觉!

浙公网安备 33010602011771号