亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于循環和傳遞值的addEventListener

用于循環和傳遞值的addEventListener

江戶川亂折騰 2019-07-26 19:14:28
用于循環和傳遞值的addEventListener我試圖使用for循環將事件偵聽器添加到多個對象,但最終導致所有偵聽器以同一個對象->最后一個對象為目標。如果我通過為每個實例定義Boxa和boxB來手動添加偵聽器,它就能工作。我想是加載項事件循環沒有按我所希望的方式工作。也許我使用了錯誤的方法。示例在容器4上使用4類=“容器”觸發器的工作方式。在容器4上的容器1,2,3觸發器事件上觸發,但僅當觸發器已被激活時。// Function to run on click:function makeItHappen(elem, elem2) {   var el = document.getElementById(elem);   el.style.backgroundColor = "red";   var el2 = document.getElementById(elem2);   el2.style.backgroundColor = "blue";}// Autoloading function to add the listeners:var elem = document.getElementsByClassName("triggerClass");for (var i = 0; i < elem.length; i += 2) {   var k = i + 1;   var boxa = elem[i].parentNode.id;   var boxb = elem[k].parentNode.id;   elem[i].addEventListener("click", function() {     makeItHappen(boxa, boxb);   }, false);   elem[k].addEventListener("click", function() {     makeItHappen(boxb, boxa);   }, false);}<div class="container">   <div class="one" id="box1">     <p class="triggerClass">some text</p>   </div>   <div class="two" id="box2">     <p class="triggerClass">some text</p>   </div></div><div class="container">   <div class="one" id="box3">     <p class="triggerClass">some text</p>   </div>   <div class="two" id="box4">     <p class="triggerClass">some text</p>   </div></div>
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

您面臨的范圍/閉包問題是function(){makeItHappen(boxa,boxb);} 博薩箱B然后,引用總是最后一個元素。

為解決這一問題:

function makeItHappenDelegate(a, b) {
  return function(){
      makeItHappen(a, b)
  }}// ...
 elem[i].addEventListener("click", makeItHappenDelegate(boxa,boxb), false);




查看完整回答
反對 回復 2019-07-27
  • 3 回答
  • 0 關注
  • 417 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號