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
如果您的单击处理程序被调用了两次,那么它可能被设置了两次。尝试更改选择器。这可能不是您想要的最终类结构,但我敢打赌,如果您向每个列表元素添加相同的类,然后在单击处理程序的选择器中使用该类,您的问题就会消失。您需要像第一个代码段中那样停止传播。