欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談JS閉包中的循環(huán)綁定處理程序

 更新時(shí)間:2014年11月09日 09:21:08   投稿:hebedich  
初學(xué)者經(jīng)常碰到的,即獲取HTML元素集合,循環(huán)給元素添加事件。在事件響應(yīng)函數(shù)中(event handler)獲取對(duì)應(yīng)的索引。但每次獲取的都是最后一次循環(huán)的索引。原因是初學(xué)者并未理解JavaScript的閉包特性。

前幾天工作中寫前端js代碼時(shí),遇到了遍歷元素給它添加單擊事件。就是這個(gè)問題讓我整整調(diào)了一個(gè)下午。最后還是下班回家,上網(wǎng)查資料才知道怎么解決的。 (PS:之前也在《jQuery基礎(chǔ)教程》第四版中看過(guò)講循環(huán)綁定處理程序的內(nèi)容,當(dāng)時(shí)估計(jì)也沒怎么用心看,所以沒記起來(lái)。)
  大神要是知道這類情況,可以關(guān)掉窗口,寫這些主要是給像我一樣的小白看的。謝謝!

  先貼上錯(cuò)誤的例子讓大家看看。(例子里面用到j(luò)Query,請(qǐng)導(dǎo)入jQuery庫(kù))

復(fù)制代碼 代碼如下:

 
  這段代碼運(yùn)行之后,點(diǎn)擊按鈕,彈出的alert中顯示數(shù)據(jù)幾呢,我之前一直認(rèn)為按鈕1到按鈕4,對(duì)應(yīng)的alert中的數(shù)字也是1到4。要是你也這樣想,那就錯(cuò)了。
  點(diǎn)擊每個(gè)按鈕,alert中都是顯示數(shù)字4,沒想到吧!
  現(xiàn)在寫幾種解決方案,共大家參考 !
  第一種、編寫一個(gè)function,在這個(gè)function中返回一個(gè)函數(shù)

復(fù)制代碼 代碼如下:

<script type="text/javascript">
  $(function(){
    for(var i=1;i<=4;i++){
      $("#btn"+i).get(0).onclick=btnClick(i);

    }
  });
  var btnClick=function(value){
    return function(){
      alert(value);
    }
  }
</script>

  第二種、使用立即調(diào)用函數(shù)表達(dá)式
  (function(value){
    //代碼塊
  })(i)//這就是立即調(diào)用函數(shù)表達(dá)式

復(fù)制代碼 代碼如下:

<script type="text/javascript">
  $(function(){
    for(var i=1;i<=4;i++){
      $("#btn"+i).get(0).onclick=(function(value){
        return function(){
        alert(value);
      } })(i);

    }
  });
</script>

   第三種、使用jQuery的each函數(shù)

復(fù)制代碼 代碼如下:

<script type="text/javascript">
  $(function(){
    $.each([1,2,3,4],function(index,value){
        $("#btn"+value).get(0).onclick=function(){
        alert(value);
      }
    });
  });
</script>

  使用上面三種情況,就可以避免一開始那個(gè)情況了。
  其中g(shù)et(0)指的是將jQuery對(duì)象轉(zhuǎn)為DOM對(duì)象。

以上就是個(gè)人對(duì)JS閉包中的循環(huán)綁定處理程序的理解,分享給大家,希望能對(duì)小伙伴們有所幫助

相關(guān)文章

  • JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三個(gè)函數(shù)的理解

    JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三個(gè)函數(shù)的理解

    以前一直會(huì)三個(gè)函數(shù)的使用產(chǎn)生混淆,現(xiàn)在通過(guò)對(duì)三個(gè)函數(shù)的原型定義的理解,其實(shí)很容易記住三個(gè)函數(shù)。
    2010-04-04
  • JavaScript中的異步與同步詳解

    JavaScript中的異步與同步詳解

    這篇文章主要介紹了JavaScript中的異步與同步詳解,如果一個(gè)線程在一個(gè)節(jié)點(diǎn)中添加內(nèi)容,另一個(gè)線程要?jiǎng)h除這個(gè)節(jié)點(diǎn),所以為了不必要的麻煩,js就是一門單線程語(yǔ)言,需要的朋友可以參考下
    2023-07-07
  • 深入理解JavaScript中的塊級(jí)作用域、私有變量與模塊模式

    深入理解JavaScript中的塊級(jí)作用域、私有變量與模塊模式

    本篇文章詳細(xì)的介紹了JavaScript中的塊級(jí)作用域、私有變量與模塊模式,詳細(xì)介紹了塊級(jí)作用域、私有變量與模塊模式,對(duì)學(xué)習(xí)JavaScript很有幫助。
    2016-10-10
  • 關(guān)于全局變量和局部變量的那些事

    關(guān)于全局變量和局部變量的那些事

    關(guān)于全局變量和局部變量的那些事,有哪些事呢?不要走開,接下來(lái)將詳細(xì)介紹,感興趣的朋友可以了解下哦
    2013-01-01
  • JavaScript的面向?qū)ο缶幊袒A(chǔ)

    JavaScript的面向?qū)ο缶幊袒A(chǔ)

    這篇文章主要介紹了JavaScript的面向?qū)ο缶幊袒A(chǔ),是JavaScript入門學(xué)習(xí)中的重要知識(shí)概念,需要的朋友可以參考下
    2015-08-08
  • ECMAScript6快速入手攻略

    ECMAScript6快速入手攻略

    本文譯自 Github 上的一篇文章,目的是對(duì)還不太熟悉 ES6語(yǔ)法的同學(xué)做一個(gè)簡(jiǎn)單的掃盲。下面一起來(lái)學(xué)習(xí)。
    2016-07-07
  • js圖片預(yù)加載示例

    js圖片預(yù)加載示例

    這篇文章主要介紹了js圖片預(yù)加載示例,需要的朋友可以參考下
    2014-04-04
  • Javascript入門學(xué)習(xí)第一篇 js基礎(chǔ)

    Javascript入門學(xué)習(xí)第一篇 js基礎(chǔ)

    這是我看了DOM編程藝術(shù),悟透JavaScript,javascript權(quán)威指南5做的筆記,我資質(zhì)不深,不能寫出高深的文章, 如果你覺得筆記寫得不好,可以不看我以后的。這篇文章就當(dāng)作浪費(fèi)你幾分鐘。
    2008-07-07
  • JavaScript 事件綁定及深入

    JavaScript 事件綁定及深入

    這篇文章主要介紹了JavaScript 事件綁定及深入,需要的朋友可以參考下
    2015-04-04
  • JS、CSS加載中的小問題探討

    JS、CSS加載中的小問題探討

    JS,CSS加載中的一些小問題,或許大家早已把它遺忘,下面和大家一起重溫下,感興趣的朋友可以不要錯(cuò)過(guò)
    2013-11-11

最新評(píng)論