1利用循环给元素添加事件(例子:点击li,弹出当前li 的索引)
错误案例:
1 <ul id="testUL"> 2 <li> index = 0</li> 3 <li> index = 1</li> 4 <li> index = 2</li> 5 <li> index = 3</li> 6 </ul> 7 <div id="box">123333</div> 8 <script> 9 var nodes = document.getElementsByTagName("li"); 10 for(i = 0;i<nodes.length;i++){ 11 console.log(nodes[i]); // 可以循环打印。。。 12 nodes[i].onclick = function(){ 13 // onsole.log(nodes[i]); //undefined 14 console.log(i);//值全是4 15 }; 16 } 17 var box = document.getElementById("box"); 18 for(var j=0; j<5;j++){ //循环完成之后,才触发的事件。 19 box.onclick = function () { 20 console.log(j); // 21 } 22 } 23 </script>
用闭包解决上述问题(正确案例)
1 <ul id="testUL"> 2 <li> index = 0</li> 3 <li> index = 1</li> 4 <li> index = 2</li> 5 <li> index = 3</li> 6 </ul> 7 <script> 8 //循环绑定事件的时候闭包也很有用,关于闭包有个很经典的例子 9 var add_the_handlers = function(nodes){ 10 var helper = function(i){ 11 return function(e){ 12 alert(i); 13 }; 14 }; 15 for(var i = 0;i<nodes.length;i++){ 16 nodes[i].onclick = helper(i); //估计是点击的当前再传的值 17 } 18 }; 19 add_the_handlers(document.getElementsByTagName("li")); 20 </script>
2注意空容器的放置位置,比如用来接收字符串的 str=“” 用于接收数组的 arr="",一般放在循环外面。
3tab效果,在给新的兄弟节点添加背景色的时候,记得先清除原来的,再添加当前点击的。
4百度前端学院 js做的遍历二叉树效果,初始化是必要的,初始化的作用有:|防止要遍历的数组无限制增长,|防止定时器重复开启(检测定时器的状态)。|防止背景色在某一个div停止无法去除。
5js中的顺序,顺序不同往往产生不同逻辑,要注意。
6监测是否在 执行某个动作,加入一个boolean变量flag(全局的),可以监测是否执行某个状态,是否有某个样式等等。
可以理解为是开关,也可以理解为是标记。
7函数只执行一次
function run_only_once(key, fn) { var w = window.top; if (key in w) { return; } w[key] = 1; fn(); } run_only_once("only", function(){ //--- });
8 事件兼容写法
function addEvent(ele,event,listener) { try{ ele.addEventListener(event,listener,false) }catch (e){ try{ ele.attachEvent(event,listener); }catch (e){ ele["on"+event] = listener; } } } addEvent(ele,"click",function (e) { document.getElementById('btn').remove(); })
9 判断浏览器类型
var u = navigator.userAgent; alert(u.toLowerCase().indexOf('qqbrowser') == -1); alert(u.toLowerCase().indexOf('ucbrowser') == -1);
10 移动端判定
if('ontouchend' in document) { // 判断移动端 }
var bgWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, bgHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight var bodyheight = document.body.clientHeight ;
11 动态创建元素
var wx=document.createElement("div"); wx.id="btn"; wx.style.width=bgWidth+'px';