2015-03-14 7 views
11

Bootstrap Modal Events कई बार आग लगती है, या फिर हमेशा एक और बार आग लगती है। मैं एक क्लिक फ़ंक्शन में मोडल इवेंट लपेटता हूं जो अभी के लिए मोडल आईडी देता है।बूटस्ट्रैप 3.3.2 मॉडल घटनाएं कई बार आग लगती हैं

मैं कैसे सुनिश्चित कर सकता हूं कि ईवेंट हमेशा एक बार आग लगती है, और केवल तभी जब क्लिक फ़ंक्शन ने इसे बुलाया?

jQuery

$('.img-modal').on('click', function() { 

// returns #modal-Id 
var modalIdClicked = $(this).attr('data-target') 
console.log ('modal id clicked from .img-modal = '+ modalIdClicked); 

console.log ('.img-modal clicked'); 

    $(modalIdClicked).on('show.bs.modal', function(event) { 

     console.log ('show.bs.modal'); 

    });  

}); 

डिफ़ॉल्ट बूटस्ट्रैप 3.3.2 मोडल एचटीएमएल

<div class="col-md-7"> 
    <img class="img-modal img-responsive cursor-pointer" data-toggle="modal" data-target="#modal-1" src="www" alt="image"> 
</div> 

<!-- Modal --> 
<div class="modal fade top-space-0" id="modal-1" tabindex="-1" role="dialog"> 
    <div class="modal-dialog modal-lg"> 
     <div class="modal-content cursor-pointer" data-toggle="modal" data-target="#modal-1"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="#modal-1">CLOSE &times;</button> 
       <h1 class="modal-title">Modal Title</h1> 
      </div> 

      <div class="modal-body"> 
       <div class="img-center"> 
        <img class="img-modal img-responsive" src="wwww" alt="image"> 
       </div> 
      </div> 

      <div class="modal-footer"> 
       <a href="#" class="btn btn-default" data-dismiss="modal">Close</a> 
      </div> 
     </div> 
    </div> 
</div> 
<!-- Modal end --> 

मैं jQuery click events firing multiple times और Bootstrap 3 - Remotely loaded modal creates duplicate javascript events पर एक नजर है किया था और यह इस .off विधि के साथ प्राप्त किया जा सकता है।

तो $(modalIdClicked).off().on('show.bs.modal', function(event) { का उपयोग करके इस मामले में चाल चल रही थी।

क्या कोई मुझे कृपया समझा सकता है क्यों इस .off इस मामले में विधि की आवश्यकता है? मुझे समस्या है यह समझने में समस्या है कि क्लिक के आसपास कैसे पारित किया जाता है।

क्या क्लिक प्रत्येक बूट के साथ बूटस्ट्रैप जेएस तक एक और बार पहुंचता है? .off विधि के बिना घटनाओं को कई बार क्यों आग लगती है?

धन्यवाद।

(मैं एक किताब से jQuery जानने के लिए, अगर वहाँ बाहर किसी भी एक सच में एक अच्छा किताब है या उसमें इस बारे में पढ़ने के लिए कोशिश कर रहा हूँ भी एक और केवल पुस्तक, तो मुझे एक नोट गोली मार कृपया, वहाँ वहाँ बहुत सारे हैं और सभी स्वाभाविक रूप से सबसे अच्छा होने का दावा करते हैं .. धन्यवाद।)

+0

मेरे मामले में, ".off()" रखना था, क्योंकि एक ही मोडल विभिन्न स्थानों से लोड किया गया था। आपके उत्तर के लिए धन्यवाद! –

उत्तर

5

.off विधि के बिना घटनाओं को कई बार क्यों आग लगती है?

क्योंकि हर बार तत्व .img-modal क्लिक किया जाता है, तो आप show.bs.modal घटना के लिए एक नया घटना श्रोता संलग्न कर रहे हैं। यही कारण है कि घटना show.bs.modal प्रत्येक क्लिक पर एक और बार निकाल दिया जाता है।

क्या कोई मुझे बता सकता है कि इस मामले में .off विधि की आवश्यकता क्यों है?

.off() विधि बस पहले संलग्न ईवेंट को हटा देता है।


आपको .off() विधि का उपयोग करने की आवश्यकता नहीं है।

Example Here

$('.modal').on('show.bs.modal', function (event) { 
    console.log(this.id); 
}); 

show.bs.modal घटना के भीतर:

बल्कि प्रत्येक क्लिक घटना पर घटना show.bs.modal के लिए एक घटना श्रोता संलग्न की तुलना में, तो आप सिर्फ एक ही कार्यक्रम श्रोता सभी तत्वों के लिए वर्ग .modal साथ जोड़ना चाहिए श्रोता, this दिखाया गया है कि .modal तत्व से जुड़ा हुआ है; इसलिए आप पहचान सकते हैं कि कौन सा मोडल प्रदर्शित होता है। उपरोक्त उदाहरण में, this.idmodal-1 होगा।

+0

ग्रेट ** स्पष्टीकरण ** और विशेष रूप से उत्तर के ** दूसरे ** भाग के लिए धन्यवाद !! मुझे उस हिस्से में कुछ चीजों के आसपास अपना मन लपेटना होगा। क्लिक किए गए मोडल को खोजने के लिए '.img-modal' पर क्लिक श्रोता था, जिसमें बच्चों के साथ डोम को घुमाने में भी शामिल था। प्रारंभिक रूप से मोडल घटनाओं के साथ मैंने जो कुछ करने की योजना बनाई थी, वह सब कुछ नहीं तो यह बहुत बदल जाता है। धन्यवाद धन्यवाद धन्यवाद! आत्म-सिखाया गया या पुस्तक/स्कूल द्वारा? यदि पुस्तक से, ** कौन सा ** कृपया? आखिरी बार, ठोस स्पष्टीकरण के लिए धन्यवाद !! – lowtechsun

+0

@lowtechsun आपका स्वागत है - खुशी हुई इससे मदद मिली। अपने प्रश्न का उत्तर देने के लिए, मैं स्वयं सिखाया जाता हूं। स्टैक ओवरफ्लो ने मुझे सबकुछ सिखाया है जो मुझे पता है। मैंने बिना ज्ञान/अनुभव के सवालों का जवाब देना शुरू कर दिया; लेकिन 1338 के जवाब के बाद, मैंने कुछ चीजें सीखी हैं;) कोर जावास्क्रिप्ट के लिए, मैं अत्यधिक अनुशंसा करता हूं ["जावास्क्रिप्ट द गुड पार्ट्स"] (http://amzn.com/0596517742) (यह एक भारी/गहराई से है पढ़ें)। साइट [एमडीएन] (https://developer.mozilla.org/en-US/docs/Web/JavaScript) भी उत्कृष्ट है .. मैंने jQuery पर किसी भी पुस्तक को नहीं पढ़ा है, मैं मुख्य रूप से [jQuery एपीआई दस्तावेज ] (http://api.jquery.com/)। –

+0

आपने बहुत अच्छी तरह से समझाया और इससे मुझे अपने मुद्दों को हल करने में मदद मिली। हर रोज ढेर ओवरफ्लो से नई चीजें सीखना। धन्यवाद –

1
modal.off().on('show.bs.modal', function(){ 
    modalBody.load(remote_content); 
}); 

मेरे मामले में, मुझे एकाधिक रिमोट_लोड का सामना करना पड़ रहा था। '.off()' ने मुझे लक्ष्य मोडल में पहले बाध्य घटना को अनबाइंड करने में मदद की।

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