いくつかの要素に対してクリックがバブリングするのを防ぐため、いくつかのイベントが発生しています。私はそれがここにstopPropagation()
ハンドラに関係しているかなり確信してサイトの任意のページの任意の場所をクリックすると、jquery .applyエラーが発生します。なぜですか?
Uncaught TypeError: ((m.event.special[e.origType] || (intermediate value)).handle || e.handler).apply is not a function
:しかし、今では毎回私は、コンソールでこのエラーを取得しています、これらのページで、これらの要素のほかに、何をクリックしているようですしかし、これを正確に修正するには、これらの関数がフロントエンドで正しく機能するために、これらの要素にstopPropagation()
関数が必要です。書類上の任意の場所のオフクリックするまで
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');
}
});
基本的には、ここで何が起こっているのか、メインメニューのために、私は/アクティブ見える滞在することが必要になります。ここでは
は、私が現在使用しているjsのコードです。また、サイトのいくつかのページにサブメニューがあり、メニューの外のどこかをクリックするまで開いておく必要があります。これはすべて正常に動作し、期待通りです。私が見ている唯一の問題は、コンソールでエラーがポップアップしていることです。これは、ul.menu-bootstrap-menu .dropdown-menu
と
.dropdown .dropdown-toggle
以外の要素をクリックするたびに増え続けるため、私を死に苦しめ始めています。このコードはすべて、
document.ready
関数呼び出しでラップされています。
どのように考えていますか?どのように起こっているのですか?コンソールで
:jQuery.minファイル内エラーを、それは場合に役立ちます私はjQueryのv1.11.3以下
を使用しています
は、エラーに関する画像であり、
downvoted?どうして? –
エラーの詳細をお知らせください。エラースタックと同様です。どのようなjQueryバージョンを使用していますか?明らかにあなたのコードに間違っているものは見当たらず、stopPropagationはそのようなエラーを引き起こすべきではありません。他に何かが起こっています。 –
@VictorLevinエラーの画像を編集した質問を、エラーで提供できる範囲で表示します。 '.stopPropagation'を指していることがわかります –