javascript - 如何去除主动效果

标签 javascript html

我正在尝试使用 js 删除 html 中导航栏的事件效果,这是我的 html 代码

<nav>
    <div class="container" id="container">
        <ul class="nav nav-tabs">
            <li role="presentation" id="a"><a href="#">a</a>
            </li>   
            <li role="presentation" id="b"><a href="#">b</a>
            </li>
            <li role="presentation" id="c"><a href="#">c</a>
            </li>       
        </ul>
    </div>
</nav>

我的 js 代码放在这里

    var a = document.getElementById('a');
    var b = document.getElementById('b');
    var c = document.getElementById('c');

    a.addEventListener('click',active);
    b.addEventListener('click',active);
    c.addEventListener('click',active);

    function active(){
        this.classList.add('active');
        if(this.className == 'active'){
              this.className = '';
         }
    }

问题是当我单击这些导航栏时,我希望它停用已单击的其他导航栏,并且以某种方式在其他栏上保留事件状态。如果有人能指出我的错误并教我如何实现我的目标,我将非常感激

最佳答案

您盲目地设置了 active 类,然后将其删除(因为 add('active') 将导致 className == 'active')。

此外,您的 this 值可能指向错误的对象(可能是 window),而不是单击的元素。

您应该使用 eventArgs.currentTarget,而不是使用 this,这样您就可以准确地知道您要定位的元素(currentTarget 指的是事件监听器添加到的元素)。

像这样:

function onListItemClicked(e) {
    var li = e.currentTarget;

    // Remove 'active' from all other <li> elements first, before setting it on the desired element:
    var lis = document.querySelectorAll('ul.nav.nav-tabs li');
    for( var i = 0; i < lis.length; i++ ) {
        lis[i].classList.remove('active');
    }

    // Add 'active' to only the desired element:
    li.classList.add('active');
}

关于javascript - 如何去除主动效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44019321/

相关文章:

javascript - 如何使用jquery获取同一类的多个复选框的值

javascript - 处理 openlayers mobile 标记的点击事件

javascript - 文本悬停超链接

javascript - 如何使这些按钮响应?

javascript - 使用 jQuery 加载页面时显示隐藏的 div 标签

javascript - 避免异步: false; in jQuery AJAX within a function

javascript - html5 Canvas 和 javascript 的奇怪行为

html - 使用 MVC 3(不显眼的 ajax)对整个模型进行客户端验证

javascript - 页面加载后显示 block 几秒钟

javascript - 谷歌地图调整大小不起作用