jquery - 单击网站任何页面上的任意位置都会导致 jquery .apply 错误,为什么?

标签 jquery stoppropagation jquery-click-event

我有一些 e.stopPropagation() 事件正在进行,以防止某些元素的点击冒泡。但现在看来,每次我在这些页面上单击除这些元素之外的任何内容时,我都会在控制台中收到此错误:

未捕获的类型错误:((m.event.special[e.origType] || (中间值)).handle || e.handler).apply 不是函数

我很确定它与这里的 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');
    }
});

基本上,对于主菜单,我需要它保持事件/可见,直到单击文档上的任何位置为止。该网站的几页上还有一个子菜单,该子菜单也需要保持打开状态,直到单击菜单外的任何位置为止。所有这一切都工作正常并且符合预期。我看到的唯一问题是控制台中弹出的错误,这开始让我烦恼,因为每次我单击除 ul.menu-bootstrap-menu .dropdown 之外的任何元素时,它都会不断增加-menu.dropdown .dropdown-toggle。所有这些代码都包含在 document.ready 函数调用中。

有什么想法如何/为什么会发生这种情况吗?

我正在使用 jQuery v1.11.3

下面是有关错误的图片(如果有帮助的话):

控制台错误: Error in Console

jQuery.min 文件中出现错误: Error in jQuery.min file

最佳答案

我认为这里有问题

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 clicking anywhere outside of sub navs!
    if ($('.nav-body').length)
    {
        var navbody = eventtarget.closest('.nav-body');

您正在非 jquery 对象 eventtarget 上调用 jquery 函数 closest

关于jquery - 单击网站任何页面上的任意位置都会导致 jquery .apply 错误,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35661164/

相关文章:

javascript - 具有不同高度响应高度的旋转木马

javascript - Jquery Slide 面板 - 加载下一个面板时关闭原始面板

jquery - 为什么单击对附加元素不起作用?

javascript - 追加Jquery后点击事件

jquery - 移除 loader magento 后端的元素样式

jquery - 从不同域加载页面的最快方法

javascript - 在大型项目中关闭 HTML 单击模式

javascript - Angular 单击停止传播事件

javascript - 当我在表格元素上滚动时 ion-scroll 上的 stopPropagation

javascript - 如何仅使用 jQuery 获取单击的子列表项?