2013-03-12 4 views
8

मेरे पास एक div है कि मैं jQuery में कुछ लिंक/बटन के साथ गतिशील रूप से बना रहा हूं। जब यह div फोकस खो देता है तो मुझे इसे हटाने की आवश्यकता होती है। यह हिस्सा मैं ठीक कर सकता हूँ।पूरे div और बच्चों के लिए jQuery फोकसआउट

हालांकि, अभी मेरे पास div के लिए रैपर पर फोकसआउट ईवेंट है और जब मैं div के अंदर एक बटन पर क्लिक करता हूं, तो रैपर बच्चे को ध्यान देता है और मेरा ईवेंट निकाल दिया जाता है। यह जांच कर रहा है कि तत्व पर क्लिक किया गया है या नहीं, मैं रैपर का एक बच्चा हूं, लेकिन चूंकि रैपर अब ध्यान केंद्रित नहीं कर रहा है, इसलिए मेरी घटना div को हटाने के लिए फिर से आग नहीं जाएगी।

मैंने भी कोशिश की है। ब्लर, लेकिन यह किसी भी बेहतर काम नहीं करता है।

ऐसा करने का सबसे अच्छा तरीका क्या है?

+0

एक बेला प्रदान करें । – honk31

+2

कृपया अपना कोड पोस्ट करें, फिर * वैकल्पिक रूप से * एक पहेली प्रदान करें। –

उत्तर

12
$("#yourDiv").focusout(function() { 
    if ($(this).has(document.activeElement).length == 0) { 
     // remove div 
    } 
}); 

$(this) = जिस div से आप ध्यान केंद्रित कर रहे हैं।

document.activeElement = वर्तमान में फ़ोकस में मौजूद तत्व।

$(this).has(document.activeElement) बस अगर सक्रिय तत्व अपने div का एक बच्चा है जाँच कर रहा है

+0

धन्यवाद, पूरी तरह से काम करता है :) अन्य उत्तर लिंक टूटा हुआ है, जांच नहीं सका। –

+0

यह मेरे लिए भी हल हो गया है। धन्यवाद! – rusvdw

+7

इस बिंदु पर मेरे लिए काम नहीं किया क्योंकि नए तत्व को अभी तक इतना ध्यान केंद्रित नहीं हुआ है कि सक्रिय शरीर है। – Bill

1

सादे जावास्क्रिप्ट के साथ इस सुलझाने relatedTarget इवेंट को तर्क में दी गई उपयोग कर रहा है का एक तरीका है:

element.addEventListener('focusout', function(event) { 
    if (element.contains(event.relatedTarget)) { 
     // don't react to this 
     return; 
    } 
    // do something 
}); 
संबंधित मुद्दे