2011-11-01 4 views
7

मेरे पास मेरी छवियों और सामग्री पर 'बैक बोर्ड' है: http://syndex.me तो मूल रूप से, आप किसी छवि पर क्लिक करते हैं, यह क्लिक की गई सामग्री के ऊपर एक जानकारी पैनल ओवरले करेगा। वर्तमान में खोला जानकारी पैनल क्या .live() द्वारा संभाले जाने पर माता-पिता को प्रचारित होने वाली बाल क्लिक घटनाओं को रोकना संभव है?

  • एक टैग, लिंक पर क्लिक करने में सक्षम हो, या सामाजिक आइकन भीतर बाहर फीका करने के लिए

    • साइट की पृष्ठभूमि पर क्लिक करें:

      मैं दो बातें करना चाहता हूँ जानकारी पैनल को इसके मूल कार्य को ट्रिगर किए बिना, जो फिर से फीका हुआ है।

    मैं बच्चे के क्लिक के लिए stopPropagation उपयोग नहीं कर सकते माता पिता क्लिक करके ((see documentation)) अधिक्रमित किया जा रहा के रूप में मैं क्लिक ईवेंट .live द्वारा नियंत्रित किया जा करने की जरूरत है इस तथ्य यह है कि पदों गतिशील लोड किया जा रहा है के कारण है।

    मैं सिर्फ इतना कहना नहीं कर सकते की तरह कुछ:। $ ("# पृष्ठभूमि") पर क्लिक करें (समारोह() {// जानकारी बोर्ड बाहर फीका} क्योंकि है कि पूरे पोस्ट आवरण द्वारा कवर किया जा रहा है, और मैं कर सकता हूँ ' टी पर एक घटना टोपी डालें क्योंकि तब मैं माता-पिता की घटनाओं को लेकर माता-पिता की दुविधा में भी गहरा हूं :-)

    अभी तक मैं कम से कम एक इन्फोबवर्ड खुला हूं (यानी मैं एक छवि पर क्लिक करता हूं , फिर एक और, यह बंद हो जाएगा पहले से ही एक खोला, और वर्तमान खोल तो इस हिस्से सब अच्छा है:।

    $('.theContent:not(.clicked)').live("click", function() { 
          $(this).children('.postInfo').fadeIn(400); 
          $(".clicked").each(function() { 
            $(this).find('.postInfo').fadeOut(400); 
            $(this).removeClass('clicked'); 
          }); 
         $(this).addClass("clicked"); 
    }); 
        $('.clicked').live("click", function() { 
          $(".clicked").each(function() { 
           $(this).find('.postInfo').fadeOut(400); 
           $(this).removeClass('clicked'); 
          }); 
    }); 
    

    पुन .live(), .del eGate() और .stopPropogation():

    के बाद से .live() विधि घटनाओं संभालती है एक बार वे दस्तावेज़ के शीर्ष करने के लिए प्रचारित किया है, यह लाइव ईवेंट के प्रसार को रोकने के लिए संभव नहीं है। इसी प्रकार, .delegate() द्वारा संचालित घटनाएं उन तत्वों के प्रचार के लिए प्रचारित होंगी जिनके लिए उन्हें प्रतिनिधि दिया गया है; डीओएम पेड़ में नीचे दिए गए किसी भी तत्व पर बाध्य घटना हैंडलर पहले से ही प्रतिनिधि कार्यक्रम हैंडलर कहलाते समय निष्पादित किए जाएंगे। इसलिए, ये हैंडलर प्रतिनिधि हैंडलर को event.stopPropagation() या झूठी लौटकर ट्रिगर करने से रोक सकते हैं।

  • +0

    मुझे यकीन है कि अगर यह काम करता है नहीं कर रहा हूँ, लेकिन आप की कोशिश की है 'return false;' अपने 'लाइव()' ईवेंट हैंडलर पर? – Andre

    +0

    नहीं, अभी अभी किया है और इससे कोई फर्क नहीं पड़ता। यद्यपि यह गंभीर रूप से ज़ेन होगा! – RGBK

    +0

    'सामान्य' जावास्क्रिप्ट में, यही वह है जो आपको करना है :) ऐसा लगता है कि ईवेंट को रोकने का कोई तरीका नहीं है। क्या आपने शायद वैश्विक वैरिएबल सेट करने और अपने एनीमेशन हैंडलर पर इसकी जांच करने का विचार किया है? – Andre

    उत्तर

    6

    कैसे बस देखना हो घटना वास्तव में विशिष्ट तत्व पर जगह ले ली के बारे में:

    function activate(el) { 
        el.find('.postInfo').fadeIn(400); 
        el.addClass('clicked'); 
    } 
    function deactivate(el) { 
        el.find('.postInfo').fadeOut(400); 
        el.removeClass('clicked'); 
    } 
    $('.theContent:not(.clicked)').live('click', function(e) { 
        deactivate($('.clicked')); 
        activate($(this)); 
    }); 
    
    $('.clicked').live("click", function(e) { 
        if (! $(e.target).is('a')) { 
         // this should not trigger if a click occured on one of the links 
         deactivate($(this)); 
        } 
    }); 
    
    $('#ape').click(function(e) { 
        if ($(e.target).is('#ape')) { 
         deactivate($('.clicked')); 
        } 
    }); 
    
    +0

    मुझे लगता है कि आप 'el.addClass (' क्लिक किया गया ') जोड़ना भूल गए हैं;' पहलू, यह मार्कर है जो कहता है, ठीक है, मुझे क्लिक किया गया है। मुझे लगता है कि आपने इसे सक्रिय फ़ंक्शन में रखा है, यदि ऐसा है, तो यह स्वयं को रद्द कर देता है: http://syndex.me। एसीके। – RGBK

    +0

    @ आरजीबीके हाँ, मैं उस पंक्ति को भूल गया था और मुझे निष्क्रिय/सक्रिय कॉल को वापस करना पड़ा। मैंने कोड अपडेट किया है, इसे आज़माएं। – deviousdodo

    +0

    इस मुद्दे को ठीक किया गया, और मैंने उलटा कॉल याद किया, धन्यवाद। हालांकि यह अभी भी माता-पिता को निष्क्रिय नहीं करता है। मैं सोच रहा हूं, शायद ऐसा इसलिए है क्योंकि लक्ष्य अभी तक सटीक नहीं है? मैं इसे समझने के लिए इस समय लक्ष्य का शोध कर रहा हूं, एक उपयोगी काम की तरह लगता है। – RGBK

    0

    आप binding के बारे में क्लिक करें घटना में सोचा है जब पोस्ट गतिशील लोड किया जाता है? इस तरह आप stopPropagation() का उपयोग कर सकते हैं।

    http://jsfiddle.net/rkw79/CzEj5/

    +0

    रुको मैंने सोचा कि बाइंड भविष्य के तत्वों से केवल वर्तमान लोगों से निपट नहीं पाता है? मैं कोशिश करता हूं और देखता हूं। – RGBK

    +0

    जैसा कि मैंने सोचा था कि बांध नई लोड की गई सामग्री को नहीं पहचानता है, जो कि दूसरी स्क्रिप्ट से आता है। – RGBK

    +0

    @ आरजीबीके, आह। यदि सामग्री को उस स्क्रिप्ट से लोड किया जा रहा है जिसे आप नियंत्रित नहीं करते हैं, तो आप इस दृष्टिकोण का उपयोग नहीं कर सकते हैं। क्या आपके पास HTML पर नियंत्रण है? आप हमेशा गतिशील सामग्री के चारों ओर एक div लपेट सकते हैं और वहां क्लिक पकड़ सकते हैं। – rkw

    0

    आप एक माता पिता के तत्व को घटना के लिए बाध्य है, यह अपने प्रचार घटना बंद नहीं होगा यह बच्चों है करने के लिए।

    आपके पास दो समाधान हैं, प्रत्येक बच्चे को एक ईवेंट बांधने और स्टॉप प्रचार कॉल डालने के लिए, या सिर्फ जांच करें कि माता-पिता में क्लिक ईवेंट किसने किया है। मैं prsonaly दूसरे समाधान अधिक सुरुचिपूर्ण पाते हैं।

    आप यहाँ इसके बारे में अधिक कुछ पढ़ सकते हैं: http://redfishmemories.blogspot.it/2014/08/jquery-prevent-event-propagation-and.html

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