Javascript jQuery方法调用了两次?

Javascript jQuery方法调用了两次?,javascript,jquery,html,twitter-bootstrap,Javascript,Jquery,Html,Twitter Bootstrap,所以我在导航栏中有一个嵌套的引导下拉列表。下面是一段代码,用于防止在单击嵌套放置时下拉以执行其正常任务。这很有效 (function($) { $(document).ready(function() { $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) { event.preventDefault(); event.stopP

所以我在导航栏中有一个嵌套的引导下拉列表。下面是一段代码,用于防止在单击嵌套放置时下拉以执行其正常任务。这很有效

(function($) {
    $(document).ready(function() {

        $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
            event.preventDefault();
            event.stopPropagation();
            $(this).parent().siblings().removeClass('open');
            $(this).parent().toggleClass('open');
        });
    });
})(jQuery);
在这段代码中,单击下拉列表的
  • 执行一些操作。当单击下拉列表的正常
    li
    时,它可以正常工作,但当它位于嵌套下拉列表的li中时,会执行函数,但当它结束时,会再次执行(onClick)。我发现避免其完全二次执行的方法是,我检查if语句
    if
    $(此)
    (单击的
    li
    )为
    null
    ,这是它第二次不知从何处执行时的情况。这种方法非常糟糕,但它是有效的,但是有人知道为什么该方法被第二次调用,以及如何阻止它被调用两次吗

    $("#dropdownViewModeSelect").on('click', 'li', function() {
    
        selectedViewMode = $(this).attr("viewmode");
    
        if (selectedViewMode != "undefined" && selectedViewMode != null) 
        {
            if (selectedViewMode != previouslySelectedViewMode || currentTimelineMode != previouslySelectedTimelineMode) 
            {
                //Remove glyphicons to all i
                var touslesideslis = $("#dropdownViewModeSelect li").find("i").removeClass('glyphicon glyphicon-ok');
                //Add glyphicons to clicked i
                $(this).find("i").addClass('glyphicon glyphicon-ok');
                //Add text to button
                currentViewModeSecondary = $(this).attr("viewmodesecondary");
                var textBtn;
                if (currentViewModeSecondary != "classic")
                    textBtn = "Ligne du temps - " + $(this).text();
                else
                    textBtn = $(this).text();
    
                $("#dropdownMenuViewMode").text(textBtn);
                $("#dropdownMenuViewMode").append('<span class="glyphicon glyphicon-eye-open pull-left"></span>');
                $("#dropdownMenuViewMode").append('<span class="caret caret-filter"></span>');
                if ($(window).width() >= 768)
                    Global.Responsiveness();
            }
        }
    
    });
    
    $(“#dropdownViewModeSelect”)。在('click','li',function()上{
    selectedViewMode=$(this.attr(“viewmode”);
    if(selectedViewMode!=“未定义”&&selectedViewMode!=null)
    {
    如果(selectedViewMode!=先前选择的ViewMode | | currentTimelineMode!=先前选择的TimeLineMode)
    {
    //删除所有i的图标
    var tuslesideslis=$(“#dropdownViewModeSelect li”).find(“i”).removeClass(“glyphicon ok”);
    //将字形图标添加到单击的i
    $(this.find(“i”).addClass('glyphicon glyphicon ok');
    //向按钮添加文本
    currentViewModeSecondary=$(this.attr(“viewmodesecondary”);
    var-textBtn;
    如果(currentViewModeSecondary!=“经典”)
    textBtn=“Ligne du temps-”+$(this).text();
    其他的
    textBtn=$(this.text();
    $(“#dropdownMenuViewMode”).text(textBtn);
    $(“#dropdownMenuViewMode”).append(“”);
    $(“#dropdownMenuViewMode”).append(“”);
    如果($(窗口).width()>=768)
    全球响应能力();
    }
    }
    });
    
    这是我的HTML下拉列表

    <li class="dropdown"> <a class="dropdown-toggle" id="dropdownMenuViewMode" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-eye-open pull-left"></span>Jour<span class="caret"></span></a>
    
    <ul class="dropdown-menu" id="dropdownViewModeSelect" role="menu">
        <li viewmode="jour" viewmodesecondary="classic"><a id="linkJour">Jour<i class='dropdownFiltreImage glyphicon glyphicon-ok'></i></a>
        </li>
        <li viewmode="ressource" viewmodesecondary="classic"><a id="linkRessource">Ressources/Jour<i class='dropdownFiltreImage'></i></a>
        </li>
        <li viewmode="week" viewmodesecondary="classic"><a id="linkSemaine">Semaine<i class='dropdownFiltreImage'></i></a>
        </li>
        <li viewmode="month" viewmodesecondary="classic"><a id="linkMois">Mois<i class='dropdownFiltreImage'></i></a>
        </li>
        <li viewmode="year" viewmodesecondary="classic"><a id="linkAnnee">Année<i class='dropdownFiltreImage'></i></a>
        </li>
        <li viewmode="agenda" viewmodesecondary="classic"><a id="linkAgenda">Agenda<i class='dropdownFiltreImage'></i></a>
        </li>
        <li class="dropdown dropdown-submenu"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Ligne du temps</a>
    
            <ul class="dropdown-menu">
                <li viewmode="timeline" viewmodesecondary="timeline"><a id="linkTimelineDay">Jour<i class='dropdownFiltreImage'></i></a>
                </li>
                <li viewmode="timeline" viewmodesecondary="timeline"><a id="linkTimelineWeek">Semaine<i class='dropdownFiltreImage'></i></a>
                </li>
                <li viewmode="timeline" viewmodesecondary="timeline"><a id="linkTimelineMonth">Mois<i class='dropdownFiltreImage'></i></a>
                </li>
            </ul>
        </li>
    </ul>
    
    • Semaine
    • MOI

  • 如果您的单击处理程序被调用了两次,那么它可能被设置了两次。尝试更改选择器。这可能不是您想要的最终类结构,但我敢打赌,如果您向每个列表元素添加相同的类,然后在单击处理程序的选择器中使用该类,您的问题就会消失。

    您需要像第一个代码段中那样停止传播。