<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml"><br /><head><br /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><br /><title>javaScript 迴圈添加事件</title><br /><link href="" rel="stylesheet" type="text/css" /><br /><mce:script type="text/javascript" src=""></mce:script></p><p><mce:style type="text/css"><!--</p><p>--></mce:style><style type="text/css" mce_bogus="1"></style></p><p><mce:script type="text/javascript"><!--<br />window.onload = function(){<br />for(var i=0; i<6; i++){<br />var alink = document.createElement('a');<br />var titleText = document.createTextNode(' ' + (i+1) + ' ');<br />alink.appendChild(titleText);<br />alink.href = "javascript:void(0)";<br />alink.onclick = function(){alert(i)};<br />var div = document.getElementById('show-detail');<br />div.appendChild(alink);<br />}<br />}<br />// --></mce:script></p><p></head><br /><body><br /><div id="wrap"><br /><div id="show-detail"></div><br /></div><br /></body><br /></html><br />
這是一組link,你會發現每點擊一下,結果總是6。WHY? 這是javascript閉包特性所引起,想瞭解請google。
解決問題:使用代理方法
添加下面代碼:
[javascript:nogutter]
view plaincopyprint?
- function delegate(fn,params,obj){
- return function(){
- fn.call(obj||window,params);
- }
- }
function delegate(fn,params,obj){<br />return function(){<br />fn.call(obj||window,params);<br />}<br />}
再將 : alink.onclick = function(){alert(i)};
改為 :
var pFunc = function(i){alert(i)};
alink.onclick = delegate(pFunc,i,alink);
即可。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml"><br /><head><br /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><br /><title>javaScript 迴圈添加事件</title><br /><link href="" rel="stylesheet" type="text/css" /><br /><mce:script type="text/javascript" src=""></mce:script></p><p><mce:style type="text/css"><!--</p><p>--></mce:style><style type="text/css" mce_bogus="1"></style></p><p><mce:script type="text/javascript"><!--<br />window.onload = function(){<br />for(var i=0; i<6; i++){<br />var alink = document.createElement('a');<br />var titleText = document.createTextNode(' ' + (i+1) + ' ');<br />alink.appendChild(titleText);<br />alink.href = "javascript:void(0)";<br />alink.onclick = function(){alert(i)};<br />var div = document.getElementById('show-detail');<br />div.appendChild(alink);<br />}<br />}<br />// --></mce:script></p><p></head><br /><body><br /><div id="wrap"><br /><div id="show-detail"></div><br /></div><br /></body><br /></html><br />
這是一組link,你會發現每點擊一下,結果總是6。WHY? 這是javascript閉包特性所引起,想瞭解請google。
解決問題:使用代理方法
添加下面代碼:
[javascript:nogutter]
view plaincopyprint?
- function delegate(fn,params,obj){
- return function(){
- fn.call(obj||window,params);
- }
- }
function delegate(fn,params,obj){<br />return function(){<br />fn.call(obj||window,params);<br />}<br />}
再將 : alink.onclick = function(){alert(i)};
改為 :
var pFunc = function(i){alert(i)};
alink.onclick = delegate(pFunc,i,alink);
即可。