首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理多个按钮?

如何处理多个按钮?
EN

Stack Overflow用户
提问于 2022-08-14 19:33:36
回答 2查看 39关注 0票数 0

我想处理多个按钮。我的目标是当用户单击first button时,first paragraph将被更改,当用户单击second button时,second paragraph将被更改。我试过了但没起作用。请检查我的代码并给我一个解决方案..。

代码语言:javascript
复制
var len = document.querySelectorAll(".myButton").length
var plen = document.querySelectorAll(".myP").length
for (i = 0; i < len; i++) {
  for (j = 0; j < plen; j++) {
    document.querySelectorAll(".myButton")[i].addEventListener("click", function() {
      if (document.querySelectorAll(".myButton")[i] == document.querySelectorAll(".myP")[j]) {
        document.querySelectorAll(".myP")[j].innerHTML = document.querySelectorAll(".myButton")[i].innerHTML;
      }
    });
  }
}
代码语言:javascript
复制
<p class="myP">oke</p>
<p class="myP">oke</p>

<h1 class="pt-3 pb-3 pl-5 pr-5 bg-warning text-light btn mx-5 my-5">00</h1><br>
<hr style="background-color:red; width:50%">
<button class="btn bg-primary text-light mx-5 my-5 myButton">one</button>
<button class="btn bg-primary text-light mx-5 my-5 myButton">two</button>

错误:

代码语言:javascript
复制
5_eventListener.html:43 Uncaught TypeError: Cannot read properties of undefined (reading 'innerHTML')
    at HTMLButtonElement.<anonymous> (5_eventListener.html:43:119)

错误行:

代码语言:javascript
复制
document.querySelectorAll(".myP")[j].innerHTML = document.querySelectorAll(".myButton")[i].innerHTML;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-14 19:39:26

您的代码需要闭包才能工作,这是相当棘手的。

相反,委托-在这里,我从文档委托,但如果按钮有一个包装,您可以从它委托。

简单多了。还可以使用数据属性将目标分配给按钮。

代码语言:javascript
复制
document.addEventListener("click", function(e) {
  const tgt = e.target;
  if (!tgt.matches(".myButton")) return 
  document.getElementById(tgt.dataset.target).innerHTML = tgt.innerHTML;
})  
代码语言:javascript
复制
<p class="myP" id="p1">oke</p>
<p class="myP" id="p2">oke</p>

<h1 class="pt-3 pb-3 pl-5 pr-5 bg-warning text-light btn mx-5 my-5">00</h1><br>
<hr style="background-color:red; width:50%">

<button class="btn bg-primary text-light mx-5 my-5 myButton" data-target="p1">one</button>
<button class="btn bg-primary text-light mx-5 my-5 myButton" data-target="p2">two</button>

票数 2
EN

Stack Overflow用户

发布于 2022-08-14 19:48:42

我不明白你为什么需要这样的东西--但是,这里--一个非常接近@mplungjan的版本是正确的,我只是不认为你应该听一下整个文档的点击,我希望它也能让初学者更容易读懂。

活生生的例子:

https://jsfiddle.net/dm3bwzgr/

代码语言:javascript
复制
<p id="p1">text 1</p>
<p id="p2">text 2</p>

<button class="btn" data-target="p1">Button 1</button>
<button class="btn" data-target="p2">Button 2</button>

<script>
// listen to click event on all buttons
document.querySelectorAll('.btn').forEach(function(btn) {
    btn.addEventListener('click', function() {
        var target = btn.dataset.target
        var el = document.getElementById(target)
              
        // apply button text to target element
        el.innerHTML = btn.innerHTML;
    });
});
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73354600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档