我有幾個e.stopPropagation()
事件正在進行,以防止點擊冒出某些元素。但現在看來,每次我點擊任何東西,除了這些元素,在這些網頁上,我在控制檯收到此錯誤:點擊任何網站上的任何頁面導致jquery .apply錯誤,爲什麼?
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文件錯誤
downvoted?爲什麼? –
你能提供關於錯誤的更多細節嗎?像錯誤堆棧一樣。你使用什麼jQuery版本?我沒有看到你的代碼有什麼明顯的錯誤,並且stopPropagation不應該導致這樣的錯誤......其他事情正在發生。 –
@VictorLevin編輯錯誤圖像的問題,儘可能多的我可以提供的錯誤。你可以看到它指向'.stopPropagation' –