【问题标题】:how to pass this element to javascript onclick function and add a class to that clicked element如何将此元素传递给javascript onclick函数并向该单击的元素添加一个类
【发布时间】:2026-01-23 06:05:02
【问题描述】:

我有一个html导航代码如下

function Data(string) {
  //1. get some data from server according to month year etc.,
  //2. unactive all the remaining li's and make the current clicked element active by adding "active" class to the element
  $('.filter').removeClass('active');
  $(this).addClass('active');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row" style="padding-left:21px;">
  <ul class="nav nav-tabs" style="padding-left:40px;">
    <li class="active filter"><a href="#month" onclick="Data('month')">This Month</a></li>
    <li class="filter"><a href="#year" onclick="Data('year')">Year</a></li>
    <li class="filter"><a href="#last60" onclick="Data('last60')">60 Days</a></li>
    <li class="filter"><a href="#last90" onclick="Data('last90')">90 Days</a></li>
  </ul>
</div>

当用户点击任何标签时

  • 所有剩余的选项卡都应该处于非活动状态,
  • 并且当前元素/选项卡应该处于活动状态,

我上面的代码不起作用。

  1. 如何让上面的代码工作?
  2. 我只想为此使用javascript onclick。当用户点击选项卡时,有什么方法可以发送this(current) 对象?

【问题讨论】:

    标签: javascript jquery html onclick


    【解决方案1】:

    使用这个html来获取被点击的元素:

    <div class="row" style="padding-left:21px;">
        <ul class="nav nav-tabs" style="padding-left:40px;">
            <li class="active filter"><a href="#month" onclick="Data('month', this)">This Month</a></li>
            <li class="filter"><a href="#year" onclick="Data('year', this)">Year</a></li>
            <li class="filter"><a href="#last60" onclick="Data('last60', this)">60 Days</a></li>
            <li class="filter"><a href="#last90" onclick="Data('last90', this)">90 Days</a></li>
        </ul> 
    </div>
    

    脚本:

     function Data(string, el)
     {
         $('.filter').removeClass('active');
         $(el).parent().addClass('active');
     } 
    

    【讨论】:

      【解决方案2】:

      您可以使用addEventListenerthis 传递给JavaScript 函数。

      HTML

      <button id="button">Year</button>
      

      JavaScript

      (function () {
          var btn = document.getElementById('button');
          btn.addEventListener('click', function () {
              Date('#year');
          }, false);
      })();
      
       function Data(string)
                {
                      $('.filter').removeClass('active');
                      $(this).parent().addClass('active') ;
                } 
      

      【讨论】:

        【解决方案3】:
        <!DOCTYPE html>
        <html>
        <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.js"></script> 
        <script type="text/javascript" src="jquery-2.1.0.js"></script> 
        <script type="text/javascript" >
        function openOnImageClick(event)
        {
        //alert("Jai Sh Raam");
        // document.getElementById("images").src = "fruits.jpg";
        var target = event.target || event.srcElement; // IE
        
        console.log(target);
        console.log(target.src);
         var img = document.createElement('img');
         img.setAttribute('src', target.src);
          img.setAttribute('width', '200');
           img.setAttribute('height', '150');
          document.getElementById("images").appendChild(img);
        
        
        }
        
        
        </script>
        </head>
        <body>
        
        <h1>Screen Shot View</h1>
        <p>Click the Tiger to display the Image</p>
        
        <div id="images" >
        </div>
        
        <img src="tiger.jpg" width="100" height="50" alt="unfinished bingo card" onclick="openOnImageClick(event)" />
        <img src="sabaLogo1.jpg" width="100" height="50" alt="unfinished bingo card" onclick="openOnImageClick(event)" />
        
        </body>
        </html> 
        

        【讨论】:

          【解决方案4】:

          您的代码中有两个问题。首先,您需要引用来捕获点击时的元素。尝试向您的函数添加另一个参数来引用它。当您尝试将其添加到函数中的“a”元素时,活动类最初也是针对 li 元素的。 试试这个。。

          <div class="row" style="padding-left:21px;">
           <ul class="nav nav-tabs" style="padding-left:40px;">
                <li class="active filter"><a href="#month" onclick="Data('month',this)">This Month</a></li>
                <li class="filter"><a href="#year" onclick="Data('year',this)">Year</a></li>
                <li class="filter"><a href="#last60"  onclick="Data('last60',this)">60 Days</a></li>
                <li class="filter"><a href="#last90"  onclick="Data('last90',this)">90 Days</a></li>
              </ul> 
          
          </div>
          
          <script>
            function Data(string,element)
              { 
                //1. get some data from server according to month year etc.,
                //2. unactive all the remaining li's and make the current clicked element active by adding "active" class to the element
                $('.filter').removeClass('active');
          
                $(element).parent().addClass('active') ;
          
              } 
          </script>
          

          【讨论】:

            【解决方案5】:
            <div class="row" style="padding-left:21px;">
                <ul class="nav nav-tabs" style="padding-left:40px;">
                    <li class="active filter"><a href="#month" onclick="Data(this)">This Month</a></li>
                    <li class="filter"><a href="#year" onclick="Data(this)">Year</a></li>
                    <li class="filter"><a href="#last60" onclick="Data(this)">60 Days</a></li>
                    <li class="filter"><a href="#last90" onclick="Data(this)">90 Days</a></li>
                </ul>
            
            </div>
            
            <script>
                function Data(element)
                {     
                   element.removeClass('active');
                   element.addClass('active') ;
                }
            </script>
            

            【讨论】:

              【解决方案6】:

              试试看

              <script>
              function Data(string)
              {      
                $('.filter').removeClass('active');
                $(this).parent('.filter').addClass('active') ;
              } 
              </script>
              

              对于类选择器,您需要在 classname 之前使用.。并且您需要为 parent 添加类。因为你点击的是锚标签而不是filter

              【讨论】: