【问题标题】:How to loop through buttons in javascript?如何循环浏览javascript中的按钮?
【发布时间】:2016-02-23 10:49:17
【问题描述】:

我的网站上有许多不同的按钮,我想为每个按钮分配不同的任务,目前我正在使用 getElementByID 一个一个地引用它们,因为我有这么多按钮,我最终编写了无数行代码只是为了参考按钮,有一些java知识我知道我所做的可以用更少的代码使用for循环来实现,但我不太确定如何去做,欢迎任何帮助。

目前这是我引用按钮的方式:

    var Button1Menu = document.getElementById("button1menu"); 
    var Button2Menu = document.getElementById("button2menu"); 
    var Button3Menu = document.getElementById("button3menu"); 
    var Button4Menu = document.getElementById("button4menu"); 
    var Button5Menu = document.getElementById("button5menu"); 
    var Button6Menu = document.getElementById("button6menu"); 
    var Button7Menu = document.getElementById("button7menu"); 
    var Button8Menu = document.getElementById("button8menu"); 
    var Button9Menu = document.getElementById("button9menu"); 
    .....
    .....
    .....
    var Button43Menu = document.getElementById("button43menu"); 

然后我将点击侦听器分配给每个:

Button1Menu.onclick = function() {

     //doing something

  };

请问有没有更好的方法来实现这一点。

【问题讨论】:

  • 使用事件委托
  • 根据点击的按钮,“做某事”有何不同?
  • 嗨@Teemu,你是什么意思?
  • 嗨@RajaSekar,请给我一个例子。
  • 按钮的点击处理程序有什么区别?他们是完全不同的,还是他们大部分时间都在做同样的任务,只是有一些稍微不同的部分?

标签: javascript html for-loop button getelementbyid


【解决方案1】:

启动一个计数器并继续检查,直到你得到一个不存在的按钮

var counter = 1;
var button  = document.getElementById( "button" + counter + "menu" );

while ( button )
{
   button.addEventListener("click", function(){
      //do something here
   });

   button  = document.getElementById( "button" + ( ++counter ) + "menu" );
}

如果所有按钮都需要分配一个点击事件,那么

var buttons = document.querySelectorAll( "button[id^='button'][id$='menu']" );
for ( var counter = 0; counter < buttons.length; counter++)
{
    buttons[counter].addEventListener("click", function(){
      //do something here
   });
}

【讨论】:

  • 只是一个建议:querySelectorAll 怎么样?
  • @RayonDabre OP 没有提到他想将点击事件分配给他页面上的所有按钮,只是分配给那些喜欢这样的按钮。无论如何,也会添加该解决方案。
  • @Teemu 哦,感谢您的指出。将counter++ 更改为++counter
  • 不是我的反对票,但第一个 sn-p 将两个处理程序附加到第一个按钮。此外,问题还不清楚,所有处理程序不一定都相同(但它们可能是相同的)。
  • @Teemu 实际上现在他在评论中提到按钮可能会做不同的事情。这实际上告诉我,OP 不清楚他/她在寻找什么。为什么要在一个页面上制作 43 个按钮并为每个按钮做不同的事情?拥有这么多按钮的唯一可能原因是网格中的每个行项都有一个按钮。
【解决方案2】:
$('button').on('click',function(){
    alert($(this).attr('id'));
});

现在在点击事件中使用$(this) jquery 对象

【讨论】:

    【解决方案3】:

    请试试这个(添加功能doSomething(item)解释实际用法):

        function doSomething(item) {
            switch (item.id) {
                case 'button3menu': 
                    // Make this button do something, only it. For example: 
                    alert('Hey, you are pressing me!');
                    break;
                default:
                    // Make all the button's whose id is not contemplated as a case value 
                    alert('My id is: ' + item.id);
                    break;
        }}
    
            <script>
            (function()
            {
                var num = 4;
                for (var i = 0; i < num; i++)
                {
                    var elem = document.createElement('button');
                    elem.id = "button" + i + "menu";
                    elem.innerHTML = "button" + i;
                    document.body.appendChild(elem)
    
                    elem.addEventListener('click', function(){doSomething(this)});
                }
            })()
            </script>
    

    【讨论】:

      【解决方案4】:

      假设您的所有或部分按钮都有一个父元素:

      <div id="parent">
      <button id="button1menu">button</button>
      <button id="button2menu">button</button>
      <button id="button3menu">button</button>
      <button id="button4menu">button</button>
      <button id="button5menu">button</button>
      <button id="button6menu">button</button>
      </div>
      

      一个单击事件监听器足以处理所有这些:

      document.getElementById("parent").addEventListener("click", function(e) {
           // e.target is the clicked element
          //check if button1menu has been clicked
          if(e.target && e.target.id == "button1menu") {
              alert(e.target.id + " was clicked");
          }
      
          //check if button2menu has been clicked
          if(e.target && e.target.id == "button2menu") {
              alert(e.target.id + " was clicked");
          }
      
        //etc
       });
      

      You can experiment more in this fiddle

      这称为事件委托,它对您有好处

      【讨论】:

        【解决方案5】:

        jQuery 解决方案

        $("button[id^='button']").on('click', function() {
          console.log($(this).attr('id'));
        });
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <button id="button1menu">button</button>
        <button id="button2menu">button</button>
        <button id="button3menu">button</button>
        <button id="button4menu">button</button>
        <button id="button5menu">button</button>
        <button id="button6menu">button</button>

        【讨论】:

        • 尼克,OP 没有在他的 OP 中使用 jquery 标签。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多