【问题标题】:How to make multiple buttons work independently using one function in java script?java - 如何使用java脚本中的一个函数使多个按钮独立工作?
【发布时间】:2019-07-12 13:01:10
【问题描述】:

如何制作更多这些按钮以便它们独立工作?我知道都是和id相关的,但是一个函数,多个id怎么用呢?

function showme(id) {
  var divid = document.getElementById(id);
  var clicky = document.getElementById("clicky");
  if (divid.style.display == 'block') {
    divid.style.display = 'none';
    clicky.innerHTML = 'MORE <i class="fa fa-arrow-down"></i>';
  } else {
    divid.style.display = 'block';
    clicky.innerHTML = 'LESS <i class="fa fa-arrow-up"></i>';
  }
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<i>Click on more. I want to have two buttons, which work independently.</i><br>

<div class="tp-caption rev-btn rev-hiddenicon  rs-hover-ready rev-mre-btn" onclick="showme('widget');" href="javascript:;" id="clicky">MORE 
  <i class="fa fa-arrow-down"></i>
</div>

<div id="widget" style="display:none;">
  TEXT 1
</div>

【问题讨论】:

  • 请不要试图通过在代码块中包装指向外部沙箱的链接来欺骗将代码放入问题中的要求。问题应该是自包含的。我们不应该仅仅为了查看您的初始问题而离开现场。现在我们看不到您的代码,并且该链接也不是链接
  • 请在此处在 stackoverflow 中发布minimal reproducible example,不要使用指向外部站点的链接。当您edit 提出问题时,请使用工具栏中的&lt;&gt; 按钮。

标签: javascript html button show-hide


【解决方案1】:

首先,我将删除您在 HTML 中添加的 onclick 侦听器,这不是一个好习惯。我会将它添加到 JS 中,选择我想要添加点击侦听器的所有按钮/div,然后附加它。

为此,您可以使用.getElementsByClassName()(也可以使用querySelectorAll())选择所有元素,并将元素保存在变量中,然后循环所有元素并附加onclick函数。

函数上下文 (this) 将是单击的按钮/div,知道在函数内部您可以找到图标和包含的 div(我将 div 移到里面是因为它更容易找到它并知道哪个div 应该被切换)。有了内部 div 和图标后,现在由您来管理 div 的打开/关闭和图标转换...

看看下面的代码,看看主要思想。

var buttons = document.getElementsByClassName("button-open-container");
for (var i = 0; i < buttons.length; i++){
  buttons[i].onclick = showme;
}

function showme(ev) {   
  var spanText = this.querySelector(".my-text");
  var childDiv = this.querySelector(".my-container");  
  var icon = this.querySelector(".my-icon");  
  
  if (childDiv.style.display == "none"){
    childDiv.style.display = "block";
    icon.className = "my-icon fa fa-arrow-up";
    spanText.innerText = "LESS"
  }
  else{
    childDiv.style.display = "none";
    icon.className = "my-icon fa fa-arrow-down";
    spanText.innerText = "MORE";
  }    
}
.button-open-container{
  display: inline-block;
  margin: 8px;  
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<i>Click on more. I want to have two buttons, which work independently.</i><br>

<div class="tp-caption rev-btn rev-hiddenicon rs-hover-ready rev-mre-btn button-open-container">
  <span class='my-text'>MORE</span>
  <i class="my-icon fa fa-arrow-down"></i>
  <div class='my-container' style="display:none;">
    TEXT 1
  </div>
</div>

<div class="tp-caption rev-btn rev-hiddenicon rs-hover-ready rev-mre-btn button-open-container">
  <span class='my-text'>MORE</span>
  <i class="my-icon fa fa-arrow-down"></i>
  <div class='my-container' style="display:none;">
    TEXT 2
  </div>
</div>

【讨论】:

  • 什么不起作用?请注意,我没有添加任何逻辑来打开和关闭容器,这取决于你,我不会为你免费代码......我制作了所有逻辑,直到单击按钮的部分和图标和内部 div 已准备好进行处理
  • 我是 js 的初学者,所以如果我知道如何解决我的问题,我不会问
  • 但是你已经有了display的逻辑并且不显示div,你的代码显示了这个......所以我刚刚回答了你的问题“如何使多个按钮独立工作...... ." 如果你得到我的代码,并在函数中添加你的打开/关闭逻辑,那么你就差不多完成了......
  • 我到了他们独立的地步。谢谢你,但现在我失去了更改文本和图标的功能。你能帮我解决这个问题吗? codepen.io/micha-abaz/pen/xoegqo
  • 好的,伙计,看我编辑的答案,我添加了一个span 来保存文本,这样我就可以找到跨度并更改它的文本......也制定了打开/关闭的逻辑并更改图标...如果这是您要查找的内容,请标记为已接受的答案。你很幸运我在这里有一些空闲时间:)
猜你喜欢
  • 2021-10-31
  • 2021-09-21
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 2013-02-27
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多