jQuery:函数调用两次导致奇怪的行为

时间:2017-03-16 21:32:27

标签: javascript jquery

我有以下jQuery来改变下拉菜单:

function getStatus(item) {
    return $(item).hasClass("active")
}

$(document).on("page:change", function () {
    $(".nav-element.parent").click(function(e) {
        el = $(this)
        if ( getStatus(el) ) { 
            $(this).toggleClass("active") 
            $(this).find(".nav-child-element").slideToggle()
        } else { 
            $(".nav-element.parent").removeClass("active")
            $(".nav-child-element").slideUp();
            $(this).addClass("active")
            $(this).find(".nav-child-element").slideDown();
        }
    })
});

并且该功能正常工作,除非我导航到另一个页面,然后使用浏览器后退按钮返回。然后当我点击$(".nav-element.parent")元素时,循环发生两次,有效地打开下拉列表。

奇怪的是,当我将$(".nav-element.parent").click(function(e) {行更改为$(document).on("click", ".nav-element.parent", function(e) {时,循环发生了3次。我不确定如何解决此问题,最后添加e.stopPropagation();无效。

1 个答案:

答案 0 :(得分:2)

在再次分配之前,您需要调用render() { return ( <Template> {'<div>some content</div>'} </Template> ) } 方法删除之前的事件侦听器。

.off