javascript迴圈添加事件,總是擷取最後一個值

來源:互聯網
上載者:User

<!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?
  1. function delegate(fn,params,obj){
  2. return function(){
  3. fn.call(obj||window,params);
  4. }
  5. }

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?
  1. function delegate(fn,params,obj){
  2. return function(){
  3. fn.call(obj||window,params);
  4. }
  5. }

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);

即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.