Нажатие в любом месте на любой странице сайта вызывает ошибку jquery .apply, почему?

У меня есть несколько 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');
    }
});

По сути, то, что происходит здесь, для главного меню, мне нужно, чтобы оно оставалось активным / видимым до тех пор, пока оно не будет удалено из любого места документа. На нескольких страницах сайта также имеется подменю, которое также должно оставаться открытым до тех пор, пока оно не будет щелкнуто где-либо за пределами меню. Все это работает нормально и, как и ожидалось. Единственная проблема, которую я вижу, - это ошибка, появляющаяся в консоли, которая начинает приводить меня в замешательство, поскольку она продолжает увеличиваться каждый раз, когда я нажимаю на любой из элементов, кроме ul.menu-bootstrap-menu .dropdown-menu а также .dropdown .dropdown-toggle, Весь этот код обернут в document.ready вызов функции.

Есть идеи, как / почему это происходит?

Я использую jQuery v1.11.3

Ниже приведены изображения об ошибке, если это помогает:

Ошибка в консоли: Ошибка в консоли

Ошибка в файле jQuery.min: Ошибка в файле jQuery.min

1 ответ

Проблема здесь я думаю

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 closest на не jquery объект eventtarget,

Другие вопросы по тегам