Sol*_*son 8 jquery jquery-click-event stoppropagation
我发生了一些e.stopPropagation()事件,以防止点击冒出某些元素.但现在似乎每次我点击这些页面上的任何内容,除了这些元素,我在控制台中收到此错误:
Uncaught TypeError: ((m.event.special[e.origType] || (intermediate value)).handle || e.handler).apply is not a function
我很确定它与stopPropagation()处理程序有关,但是我如何准确地解决这个问题,我需要stopPropagation()这些元素上的函数才能使这些函数正确地在前端工作.
这是我目前正在使用的js代码:
var mainMenu = $(".menuMain");
if (mainMenu.length) {
var clonedMain = mainMenu.clone(true, true),
baseLogo = clonedMain.find('.logoMenu').find('.base-logo'),
scrollLogo = clonedMain.find('.logoMenu').find('.scroll-logo');
clonedMain.addClass('scroll-menu').addClass('hidden');
baseLogo.addClass('hidden');
scrollLogo.removeClass('hidden');
}
// Bootstrap Menu Dropdowns:
$('ul.menu-bootstrap-menu').on('click', '.dropdown-menu', function(event) {
event.preventDefault();
event.stopPropagation();
$(this).parent().siblings().removeClass('open');
$(this).parent().toggleClass('open');
});
$('.dropdown').on('click', '.dropdown-toggle', function(e) {
e.stopPropagation();
var $this = $(this);
var $li = $this.closest('li.dropdown');
$li.siblings().removeClass('open');
$li.siblings().find('a').removeClass('dropdown-overlay').children('.caret-arrow').hide();
if ($li.hasClass('open'))
{
$li.removeClass('open');
$this.removeClass('dropdown-overlay').children('.caret-arrow').hide();
}
else
{
// Remove Sticky Nav search, if exists!
if ($('.search-scroll').length)
clonedMain.find('.menu-bootstrap-menu > li.search a').trigger('click');
$li.addClass('open');
$this.addClass('dropdown-overlay').children('.caret-arrow').show();
}
});
$(document).on('click', function(e) {
$('li.dropdown').removeClass('open');
$('li.dropdown a.dropdown-toggle').removeClass('dropdown-overlay').children('.caret-arrow').hide();
var eventtarget = e.target;
// If clicking anywhere outside of sticky nav search bar!
if ($('.search-scroll').length)
{
var navtargets = eventtarget.closest('li.menu-item.search'),
objsearch = $(eventtarget);
if (!navtargets && !objsearch.hasClass('search-input'))
clonedMain.find('.menu-bootstrap-menu > li.search a').trigger('click');
}
// If clicking anywhere outside of sub navs!
if ($('.nav-body').length)
{
var navbody = eventtarget.closest('.nav-body');
if (!navbody && $('.nav-body').is(':visible'))
$('.nav-body').slideToggle('fast');
}
});
Run Code Online (Sandbox Code Playgroud)
基本上,这里发生了什么,对于主菜单,我需要它保持活动/可见,直到从文档的任何位置点击.网站的几个页面上还有一个子菜单,在菜单外的任何位置点击之前也需要保持打开状态.所有这一切都正常,正如预期的那样.我看到的唯一问题是控制台中出现的错误,它开始让我死亡,因为它每次点击除ul.menu-bootstrap-menu .dropdown-menu和之外的任何元素时都会不断递增.dropdown .dropdown-toggle.所有这些代码都包含在document.ready函数调用中.
任何想法如何/为什么会发生这种情况?
我正在使用jQuery v1.11.3
以下是有关错误的图片,如果它有帮助:
我认为问题在这里
var eventtarget = e.target;
// If clicking anywhere outside of sticky nav search bar!
if ($('.search-scroll').length)
{
var navtargets = eventtarget.closest('li.menu-item.search'),
objsearch = $(eventtarget);
Run Code Online (Sandbox Code Playgroud)
和这里
// If clicking anywhere outside of sub navs!
if ($('.nav-body').length)
{
var navbody = eventtarget.closest('.nav-body');
Run Code Online (Sandbox Code Playgroud)
closest您正在非 jquery 对象上调用 jquery 函数eventtarget。
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |