पर क्लिक करके नया एचटीएमएल अपने बैकड्रॉप
12
A
उत्तर
14
बैकड्रॉप क्लिक डायलॉग बाउंडिंग रेक्ट का उपयोग करके पता लगाया जा सकता है।
var dialog = document.getElementByTagName('dialog');
dialog.showModal();
dialog.addEventListener('click', function (event) {
var rect = dialog.getBoundingClientRect();
var isInDialog=(rect.top <= event.clientY && event.clientY <= rect.top + rect.height
&& rect.left <= event.clientX && event.clientX <= rect.left + rect.width);
if (!isInDialog) {
dialog.close();
}
});
4
एक और अधिक कुशल समाधान padding: 0
के साथ एक div
में dialog
-content रैप करने के लिए है। इस तरह आप क्लिक-इवेंट के event.target
की जांच कर सकते हैं, जो वास्तविक मोडल के मामले में div
के भीतर बैकड्रॉप और किसी भी अन्य तत्व के मामले में संवाद का संदर्भ देता है।
वास्तविक आयामों की जांच न करके, हम लेआउट चक्र को रोक सकते हैं।
const popup = document.getElementById('popup');
const popupDialog = document.getElementById('popup-dialog');
popup.addEventListener('click', function(e){
console.info(e.target.tagName);
if (e.target.tagName === 'DIALOG') popupDialog.close()
});
<div id="popup" style="padding: 0">
<dialog id="popup-dialog" style="display:none;">
<h4>Dialog Title</h4>
<footer class="modal-footer">
<button id="popup-close" type="button">close</button>
<button id="popup-ok" type="button">ok</button>
</footer>
</dialog>
</div>
0
किसी को भी इस सवाल पर ठोकर और समाधान @meaku द्वारा सिफारिश का पालन करना चाहता है के लिए, यहाँ मैं इसे और तत्व को संपुटित करने के लिए एक का उपयोग नहीं करने के लिए getBoundingClientRect के साथ काम() गणना कैसे हल है
संबंधित मुद्दे
- 1. बैकड्रॉप
- 2. बीएस-मोडल-बैकड्रॉप
- 3. बूटस्ट्रैप मॉड्यूल बैकड्रॉप के पीछे क्रोम
- 4. सीएसएस: बैकड्रॉप-फ़िल्टर के लिए वर्कअराउंड?
- 5. बूटस्ट्रैप मोडल केवल बैकड्रॉप दिखा रहा है
- 6. अपने
- 7. सैमसंग गैलेक्सी एस में लॉन्चर में आइकन बैकड्रॉप हैं, इसे निर्दिष्ट करने के किसी भी तरीके से?
- 8. अपने यूआईवीविगेशन व्यू कंट्रोलर का उपयोग अपने
- 9. अपने उपयोगकर्ता_आईडी
- 10. अपने मूल्य
- 11. अपने कंटेनर
- 12. अपने विकर्ण
- 13. अपने डायनामिक_कास्ट
- 14. अपने एपीआई
- 15. अपने एपीआई
- 16. अपने बेहतरीन
- 17. अपने नाम
- 18. अपने एपीआई
- 19. अपने मूल्य
- 20. अपने केंद्र
- 21. अपने आवेदन
- 22. अपने तर्कों
- 23. अपने नामकरण
- 24. अपने कंटेनर
- 25. अपने प्रकार
- 26. अपने आईडी
- 27. अपने आवेदन
- 28. अपने आईडीई
- 29. अपने मॉडल
- 30. अपने यूआरएल
शानदार विचार! अच्छा काम करता है, धन्यवाद! – mantramantramantra
मुझे यह भी जांचना पड़ा कि 'event.target'' संवाद 'था। ईजी 'अगर (! IsInDialog && event.target.tagName === 'DIALOG')'। यदि 'एंटर' मारकर संवाद में एक फॉर्म सबमिट किया गया है, तो एक क्लिक इवेंट इवेंट सबमिट बटन से बबल हो जाएगा, और किसी कारण से इसके क्लाइंटएक्स और क्लाइंट 0 0 हैं। – kmurph79