Ho alcuni eventi e.stopPropagation()
in corso per impedire che vengano fatti clic su alcuni elementi. Ma ora sembra che ogni volta che clicco su qualsiasi cosa, oltre a questi elementi, in queste pagine, sto ottenendo questo errore nella console:Fare clic in qualsiasi punto di una pagina del sito causa l'errore jquery .apply, perché?
Uncaught TypeError: ((m.event.special[e.origType] || (intermediate value)).handle || e.handler).apply is not a function
Sono abbastanza sicuro che ha a che fare con il gestore stopPropagation()
qui , ma come faccio a risolverlo esattamente, ho bisogno della funzione stopPropagation()
su questi elementi affinché queste funzioni funzionino correttamente sul frontend.
Ecco il codice js che sto utilizzando attualmente:
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');
}
});
In sostanza, ciò che sta accadendo qui, per il menu principale, ho bisogno di rimanere attivi/visibili finché cliccato off di qualsiasi punto del documento . C'è anche un sottomenu su alcune pagine del sito, che deve anche rimanere aperto fino a quando non viene cliccato ovunque al di fuori del menu. Tutto ciò funziona bene e come previsto. L'unico problema che sto vedendo è l'errore spuntare nella console, che sta iniziando a erigerlo a morte man mano che continua ad aumentare ogni volta che clicco su uno qualsiasi degli elementi diversi da ul.menu-bootstrap-menu .dropdown-menu
e .dropdown .dropdown-toggle
. Tutto questo codice è incluso in una chiamata di funzione document.ready
.
Qualche idea come/perché questo sta accadendo?
Sto usando jQuery v1.11.3
Qui di seguito sono le immagini su errore, se aiuta:
downvoted? Perché? –
Puoi fornire maggiori dettagli sull'errore? Come lo stack degli errori. Che versione di jQuery stai usando? Non vedo nulla di evidentemente sbagliato nel tuo codice e stopPropagation non dovrebbe causare un errore del genere ... Qualcos'altro sta succedendo. –
@VictorLevin Domanda modificata con immagini di errore per quanto posso fornire sull'errore. Puoi vederlo puntare a '.stopPropagation' –