2016-02-26 7 views
8

मेरे पास कुछ तत्वों के लिए बुलबुले से क्लिक रोकने से रोकने के लिए कुछ e.stopPropagation() ईवेंट चल रहे हैं।साइट के किसी भी पेज पर कहीं भी क्लिक करना jquery का कारण बनता है। ठीक है त्रुटि, क्यों?

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

मैं बहुत यकीन है कि यह यहाँ stopPropagation() हैंडलर के साथ क्या करना है कर रहा हूँ: लेकिन अब ऐसा लगता है कि हर मैं कुछ भी पर क्लिक करें, उन तत्वों के अलावा, इन पृष्ठों पर, मैं कंसोल में इस त्रुटि हो रही है लगता है , लेकिन मैं इसे ठीक से कैसे ठीक करूं, इन कार्यों पर उचित रूप से कार्य करने के लिए इन तत्वों पर 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 v1.11.3

नीचे का उपयोग कर रहा, त्रुटि के बारे में चित्र हैं अगर यह मदद करता है: कंसोल में

त्रुटि: Error in jQuery.min file

: Error in Console

jQuery.min फ़ाइल में त्रुटि

+0

डाउनवॉटेड? क्यूं कर? –

+0

क्या आप त्रुटि के बारे में अधिक जानकारी प्रदान कर सकते हैं? त्रुटि ढेर की तरह। आप किस jQuery संस्करण का उपयोग कर रहे हैं? मुझे आपके कोड और स्टॉप के साथ स्पष्ट रूप से कुछ भी गलत नहीं दिख रहा हैप्रॉपैगेशन को इस तरह की त्रुटि नहीं होनी चाहिए ... कुछ और चल रहा है। –

+0

@VictorLevin त्रुटि की छवियों के साथ प्रश्न संपादित किया जितना मैं त्रुटि पर प्रदान कर सकता हूं। आप इसे '.stopPropagation' –

उत्तर

2

समस्या मुझे लगता है कि

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 वस्तु eventtarget पर jQuery समारोह closest कॉल कर रहे हैं।

+0

यदि मैं इसे एक jquery ऑब्जेक्ट में बदलता हूं तो यह 'navtargets' और' navbody 'के लिए काम नहीं करता है, उदाहरण के लिए, यदि मैं ऐसा करता हूं:' var eventtarget = $ (e.target); 'मुझे उस पर त्रुटि मिलती है और यह उम्मीद के रूप में काम नहीं करता है। –

+2

@ सोल्मन एरिक सही है, आप मूल डीओएम ऑब्जेक्ट पर एक jQuery विधि को कॉल कर रहे हैं। आप जिस अजीब व्यवहार के बारे में बात कर रहे हैं उसे ठीक करने के लिए क्रमशः '! Navtargets.length' और'! Navbody.length' पर अपने सशर्त बयानों में '! Navtargets' और'! Navbody' को बदलने की आवश्यकता है। यदि आप अपने चर पर 'console.log() 'का उपयोग करते हैं तो यह सब स्पष्ट होगा। लेकिन वास्तव में, आपकी पूरी लिपि इसके बारे में जाने का एक अजीब तरीका है। एक उचित [mcve] के बिना मैं वास्तव में आपको एक बेहतर उदाहरण नहीं दे सकता। –

+0

एक मूल डोम विधि भी है जिसे निकटतम भी कहा जाता है: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest केवल IE इसका समर्थन नहीं करता है। ऐसा कहा जाता है, ऐसा लगता है कि ओपी चाहता है कि वास्तव में jq ऑब्जेक्ट और विधि –

संबंधित मुद्दे