簡體   English   中英

jQuery方法調用過兩次?

[英]jQuery method called twice?

因此,我的導航欄中有一個嵌套的引導程序下拉列表。 這是防止單擊嵌套的下拉列表以執行其正常任務的下拉列表的代碼。 這很好。

(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> onclick執行某些操作。 當單擊位於下拉列表的普通li上時,它可以正常工作,但是當位於嵌套下拉列表的li中時,該函數將被執行,但在結束時將再次執行該函數(onClick)。 順便我發現,以避免其完整的執行Seconde系列是我在檢查我的if語句if $(this) (點擊的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();
        }
    }

});

這是下拉菜單的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>

如果您的點擊處理程序被調用了兩次,則可能被設置了兩次。 嘗試更改選擇器。 這可能不是您想要的最終類結構,但是我敢打賭,如果您將相同的類添加到每個列表元素,然后在選擇器中使用該類作為單擊處理程序,您的問題就會消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM