单击元素时,JQuery不会使用`active`类更改元素

时间:2015-01-25 02:53:49

标签: javascript jquery html twitter-bootstrap

我正在使用bootstarp导航栏。由于在单击tavs时bootstrap不会自动切换active选项卡,因此我已经编写了一些JQuery来为我执行此操作。我以前做过这个,我无法弄清楚我做错了什么。

我的HTML:

<!DOCTYPE html>
<html>
<head>
  <title>Test</title>
  <link rel="stylesheet" type="text/css" href="public\bootstrap-3.3.2-dist\css\bootstrap.min.css">
  <link rel="stylesheet" type="text/css" href="public\bootstrap-3.3.2-dist\css\bootstrap-theme.min.css">
  <link rel="stylesheet" type="text/css" href="public\styles\style.css">
  <script src="https://code.jquery.com/jquery-latest.min.js"></script>
  <script src="public\bootstrap-3.3.2-dist\js\bootstrap.min.js"></script>
  <script src="public\js\script.js"></script>
</head>
<body>
  <div class="header">
  <h1><em>This is a test</em></h1>
  </div>
  <ul class="nav nav-tabs">
    <li id="tab" class="active"><a href="1.html">Page 1</a></li>
    <li id="tab"><a href="1.html" target="content">Page 2</a></li>
    <li id="tab"><a href="1.html" target="content">Page 3</a></li>
  </ul>
</body>
</html>

我的JQuery代码:

$(document).ready(function() {
  $('#tab').click(function(event) {
    $('.active:first').removeClass('active');
    el = event.target;
    el.addClass('active');
  });
});

每当我单击一个选项卡时,它应该获得带有active类的第一个元素,删除active类,然后将active类添加到单击的元素中。但它不起作用。当我单击选项卡时,它只会按照链接执行操作。我尝试更改伪类:first的使用以使用Jquery&#39; .first(),但这不起作用。我以前再做过这个,但现在不能让它工作。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您在非jQuery对象上使用.addClass()方法。

event.target包裹$() - &gt; $(event.target)

$('.tab').on('click', function (event) {
    event.preventDefault();
    $('.active').removeClass('active');
    $(event.target).closest('.tab').addClass('active');
});

一些附注:

  • id必须是唯一的,它们应该重复。改为使用类。
  • 由于您点击锚元素会使用event.preventDefault()来阻止默认行为。
  • 由于$(event.target)是被点击的元素,因此如果单击它,它将包含锚元素。由于active类应位于父li元素上,因此您可以使用$(event.target).closest('.tab')选择它,如上例所示。或者,由于事件处理程序已附加到.tab元素,因此您也可以使用$(this)

    $('.tab').on('click', function (event) {
        event.preventDefault();
        $('.active').removeClass('active');
        $(this).addClass('active');
    });
    

完成这些更改后,请查看this example

相关问题