2016-02-26 23 views
8

Birkaç e.stopPropagation() olaylar belli elemanlar için kabardığını gelen tıklamaları önlemek için gidiş var. Buranın stopPropagation() işleyicisi ile ilgisi var eminimSitenin herhangi bir yerinde herhangi bir yere tıklamak jquery .apply hatasına neden olur, neden?

Uncaught TypeError: ((m.event.special[e.origType] || (intermediate value)).handle || e.handler).apply is not a function

: Ama şimdi her şey burada konsolunda bu hatayı alıyorum, bu sayfalarda, bu unsurların yanı sıra, herhangi bir şey tıklayarak görünüyor , ancak bunu tam olarak nasıl düzeltebilirim, bu işlevlerin ön planda düzgün çalışması için, bu elemanlarda stopPropagation() işlevine ihtiyacım var. belge üzerinde herhangi bir yere kapalı tıklandığında kadar

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'); 
    } 
}); 

Temelde, burada neler olduğunu, ana menü için, G/aktif görünür kalmaya ihtiyacım: Burada

Şu anda kullanarak js kodu . Ayrıca, sitenin birkaç sayfasında bir alt menü vardır ve bu da menünün dışında herhangi bir yere tıklanıncaya kadar açık kalmalıdır. Bütün bunlar iyi çalışıyor ve beklendiği gibi. Görüyorum tek sorun ben ul.menu-bootstrap-menu .dropdown-menu ve .dropdown .dropdown-toggle dışındaki unsurların herhangi tıklayarak her süresinin arttırılmasıyla tutar olarak beni öldüresiye Erk başlıyor konsolda, kadar haşhaş hatadır. Bu kodun tamamı document.ready işlev çağrısı ile sarılmıştır.

bu neden oluyor nasıl/Herhangi bir fikir? Konsolu

Hata: Error in jQuery.min file

: jQuery.min dosyasında Error in Console

Hata eğer yardımcı olur jQuery v1.11.3 Aşağıda

kullanıyorum

, hata hakkında görüntülerdir burada

+0

downvoted? Niye ya? –

+0

Hata hakkında daha fazla bilgi verebilir misiniz? Hata yığını gibi. Hangi jQuery sürümünü kullanıyorsunuz? Açıkçası kodunuzda yanlış bir şey görmüyorum ve durdurmaPropagasyon böyle bir hataya neden olmamalı ... Başka bir şey devam ediyor. –

+0

@VictorLevin Hata ile ilgili olarak, hataların olabildiğince fazla görüntüsünü içeren soru düzeltildi. '.stopPropagation' –

cevap

2

sorun i

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); 
düşünüyorum

ve burada

// If clicking anywhere outside of sub navs! 
    if ($('.nav-body').length) 
    { 
     var navbody = eventtarget.closest('.nav-body'); 

olmayan bir jquery nesne eventtarget jquery işlevini closest diyoruz.

+0

o, örneğin, navbody' 'navtargets'' çalışıp gelmez beklendiği gibi çalışmıyor. –

+2

@Solomon Eric doğru, yerel bir DOM nesnesinde jQuery yöntemini çağırıyorsunuz. Bahsettiğiniz garip davranışları düzeltmek için, '! Navtargets' ve '! Navbody 'ifadelerini sırasıyla'! Navtargets.length 've'! Navbody.length' olarak değiştirmelisiniz. Değişkenlerinize 'console.log()' kullandıysanız, tüm bunlar açık olacaktır. Ama gerçekten, bütün senaryonun bunun hakkında garip bir yol gibi görünüyor. Uygun bir [mcve] olmadan, sana gerçekten daha iyi bir örnek veremem. https://developer.mozilla.org/en-US/docs/Web/API/Element/closest Sadece IE bunu desteklemez: –

+0

çok yakın adında bir yerli DOM yöntemi yoktur. Bu sadece OP gerçekten jq nesne ve yöntem –

İlgili konular