1. 程式人生 > >JS實現迴圈給元素繫結事件的幾個常用方法

JS實現迴圈給元素繫結事件的幾個常用方法

作為一個JS的初學者,想對一些元素迴圈繫結事件的時候總是出現各種問題,尤其是在對閉包沒有熟練掌握的時候更是一頭霧水。網上一查,果然好多初學者有這個困惑,既然這個問題總是出現,於是在我就總結了以下兩個比較好理解的解決方案,分享給大家:(可能還有更好的方式我沒有發現,請各位前輩分享大笑

比如下面這個例子:

HTML程式碼:

<div class="wrap">
	    <a href="javascript:;" class="link">第一個連結</a>
	    <a href="javascript:;" class="link">第二個連結</a>
	    <a href="javascript:;" class="link">第三個連結</a>
</div>

JS程式碼:

window.onload = function() 
{
     var aLi = document.getElementsByTagName("a");
     for(var i = 0; i < aLi.length; i++) 
     {
         aLi[i].onclick = function() 
         {
                alert(i);   //3
         }   
      }
}

執行結果:

發現不管點哪個連結都是彈出“3”,其實在我們呼叫onclick函式時候,外層迴圈結束已經結束了,i值結束為3跳出。

那其實換句話說,只要我們能把這個i值動態傳到onclick函式裡不就可以了。


解決方案一(給aLi一個count用於記錄位置):

window.onload = function() 
{
     var aLi = document.getElementsByTagName("a");
     for(var i = 0; i < aLi.length; i++) 
     {
	  aLi[i].count = i;
	  aLi[i].onclick = function() 
	  {
	       alert(this.count);   
	  }   
      } 
}

解決方案二(可以迴圈給繫結事件的函式動態傳入引數,閉包的經典例子):

window.onload = function() 
{
    var aLi = document.getElementsByTagName("a");
    for(var i = 0; i < aLi.length; i++) 
    {
	var a = function(k)
        {
	     aLi[k].onclick = function() 
	     {
		alert(k);
	      }
	}a(i); 
  }  	 
}

如有錯誤請指出,謝謝

相關推薦

JS實現迴圈元素事件常用方法

作為一個JS的初學者,想對一些元素迴圈繫結事件的時候總是出現各種問題,尤其是在對閉包沒有熟練掌握的時候更是一頭霧水。網上一查,果然好多初學者有這個困惑,既然這個問題總是出現,於是在我就總結了以下兩個比較好理解的解決方案,分享給大家:(可能還有更好的方式我沒有發現,請各位前輩

js迴圈li事件實現 點選li彈出其索引值 和內容

html程式碼   <ul>   <li>香蕉</li>   <li>蘋果</li>      <li>菠蘿</li>   <li>獼猴桃</li>  

迴圈元素事件

for(var i=0; i<10; i++){ $('#pages_div_' + i).bind('click', {index : i}, clickHandler); } function clickHandler(event){ $(

關於js動態渲染的元素事件遇到的坑

總結一下今天專案中遇到的關於動態渲染元素繫結事件遇到的一些坑。 首先作為後臺管理系統除左邊側邊欄外,右邊主體部分都是動態渲染出來的。 第一:在給右側主體裡面元素繫結事件的時候,不要直接on繫結,而是用父元素代理事件來繫結,直接on是綁不上去的。 第二:因為是動態渲染的元素

動態動態生成元素事件不生效解決方法

JQ動態生成的元素,無法繫結事件,查詢到的原因是:繫結事件的元素必須是構造頁面時已經存在的,假如構造元素是不存在,是後動態生成,則繫結不了,解決方法,通過on()繫結舉例:$("body").on("c

微信小程式 js動態前臺元素事件

//js動態給前臺繫結事件 var myList = ["items1","items2","items3"] pageObject = { data:{ actionSheet

jsdiv事件實現點選切換效果的種方式總結

用js給div繫結事件,實現點選切換效果,總結有如下幾種方式 script type="text/javascript"> function btnAction() { var titleNValue = document.getElementBy

js 元素回車事件

經常會看到登入頁面輸入完賬戶密碼,回車就登入了.實現方法: 1.jquery方法 $("#focus")為獲取id為focus的元素 $("#focus").keypress(function(ev

js還沒有載入上來的時候,怎麼dom 事件

這就要用到事件委託了 如何進行事件委託 **(1) 當存在多個元素可以共用同一個監聽器。** 例子:當想要點選li來觸發事件的時候,第一種方法是為每個li都繫結一個監聽器,但當li很多時,這樣處理就過於繁瑣。為了減少dom 的操作,我們可以利用事件委託交給父級元素ul來

js和jq的dom操作&&append的元素事件失效

列數:var td=$("#toptable tr").eq(1).find("td").length;    ps:當第一列是th的時候可以選擇find("th")然後就是弟0行,如果第一列不是th那麼可以直接eq(0)

AngularJS中,如何動態生成的元素事件

1 . 我們知道在jquery中,動態生成一個元素,如果要在動態生成元素的同時,動態繫結事件,可以通過live/on方法(在jquery3.0中已經廢除了bind方法)。 2 . 在angularjs中,操作DOM一般在指令中完成,事件監聽機制是在對於已經靜態

利用jquery動態載入的元素事件

工作中經常會遇見利用ajax載入dom元素,這樣就不能給動態載入的元素繫結時間 此時可以利用jquery的on方法解決(老版本使用live方法) $(document).on("click",".edit-btn",function(){             aler

jQuery一個元素事件前,一次點選會多次觸發的問題所在

如果在給一個元素繫結事件後,再次繫結事件就會出現多次繫結的情況,此時就會出現多次觸發,解決方法我採用的是,在繫結事件前進行解綁,bind繫結的時間用ubbind解綁,其他繫結方法用對應的解綁方法解綁。

Jquery動態新增的元素事件:live() delegate() on()

給已存在的元素繫結事件時可以直接寫: $(".class a").click(function(){ }) 但是對於動態生成並append()到頁面上的元素來說,就不能直接用上面的方法來繫結事件了。 在Jquery 1.7之前我們可以通過live()和delega

元素click事件時造成事件累加

在專案中,遇到了這樣的問題:用li標籤展示每個地區,然後給li增加click事件,當點選時,使用toggleClass()方法增加一個active的樣式。 li存在一個div中,每次更換省份會使用ajax請求替換div中的內容,有的li標籤點選後並沒有出現選中的狀態。剛開始

元素事件和解綁事件js相容程式碼

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>title</title> </head>

用ajax刷進頁面的標籤,如何事件

今天,寫程式碼 ,突然用到這個,發現怎麼也繫結不了事件,於是乎,百度,試了好久才解決問題 這是我要刷進頁面的程式碼 我試了一下onclick,繫結不到,因為onclick只能繫結html頁面上已經存在的元素 對於刷進去的標籤,只可以用on還有live      

jQuery動態新增的元素事件

  今天在做專案是時候發現動態新增的元素不能繫結事件,由於本人js和jquery技術有限,所以也不知道原因,一查才知道,動態新增的元素繫結事件就會失效,所以修改了一下。 jquery中繫結事件一般使用bind,或者click,但是這隻能是對已經載入好的元素定義事件,那些後來新增插入

41. jQuery-使用unbind()方法移除元素事件

1.效果圖 2.html程式碼 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>41. jQuery-使用unbind()方法移出元

jquery html 動態新增元素事件

由於實際的需要,有時需要往網頁中動態的插入HTML內容,並在插入的節點中繫結事件處理函式。我們知道,用Javascript向HTML文件中 插入內容,有兩種方法, 一種是在寫HTML程式碼寫入JS,然後插入到文件中; 另外一種是通過ajax的方式,從伺服器獲取資料,然