2012-07-18 8 views
32

मान लीजिए मैं यह कर:क्लिक किया उद्देश्य यह है कि jQuery कलंक शुरू हो जाओ() घटना

$(target).blur(function(e){ 
    //do stuff 
}); 

वहाँ उद्देश्य यह है कि आदेश कलंक कार्यवाही प्रारंभ करने के पर क्लिक किया गया था लाने के लिए कोई तरीका है?

मैंने e.target का उपयोग करने का प्रयास किया, लेकिन ऐसा लगता है कि क्लिक ऑब्जेक्ट की बजाय धुंध क्रिया से जुड़ी वस्तु को वापस कर रहा है।

+2

क्यों इस सवाल का डुप्लिकेट के रूप में चिह्नित किया गया है? मुझे विशेष रूप से jQuery के धुंधले घटना के बारे में एक और सवाल नहीं मिला है। यदि यह वास्तव में एक डुप्ली है, तो कृपया डुप्लिकेट प्रश्न से लिंक करें। –

+0

क्या किसी ने इस स्थिति में गैर क्रोमियम ब्राउज़र काम करने का कोई तरीका खोजा है? जहां तक ​​मैं कह सकता हूं, नए केंद्रित तत्व को प्राप्त करने के लिए मैदान के बाहर टैब्स को नियंत्रित नहीं किया जा सकता है। 'var target = e.toElement || e.relatedTarget; 'कुछ भी नहीं देता है। क्रैपी स्पेक लेखकों से क्रैपी चश्मे ... – user2173353

उत्तर

29

, यह करना चाहिए:

$(function() { 

    var clicky; 

    $(document).mousedown(function(e) { 
     // The latest element clicked 
     clicky = $(e.target); 
    }); 

    // when 'clicky == null' on blur, we know it was not caused by a click 
    // but maybe by pressing the tab key 
    $(document).mouseup(function(e) { 
     clicky = null; 
    }); 

    $(target).blur(function(e) { 
     console.log(clicky); 
    });​​ 

}); 
+6

यह केवल तभी काम करता है जब उपयोगकर्ता * किसी अन्य तत्व पर * क्लिक किया गया हो। यह काम नहीं करता है अगर उपयोगकर्ता ने इसे टैब किया है, या इसे किसी अन्य विधि द्वारा फोकस प्राप्त हुआ है। –

1

blur हैंडलर फ़ंक्शन के भीतर इसका उपयोग करके आपको blured तत्व मिलेगा।

$(target).blur(function(e){ 
    var bluredElement = this; // dom element 
    // To make a jQuery object 
    var bluredElement = $(this); 
}); 

blur ईवेंट के भीतर आप क्लिक किए गए तत्व को नहीं पकड़ सकते हैं। click एड तत्व प्राप्त करने के लिए आपको click ईवेंट की आवश्यकता है। उदाहरण के लिए:

$(element).click(function() { 
    var clickedElement = this; 
}); 

और प्राप्त करने के लिए केंद्रित तत्व आप की तरह :focus का भी उपयोग करेंगे: $(':focus') आप दस्तावेज़ में तत्व ध्यान केंद्रित रिटर्न होगा।

+0

मुझे पता चला कि मुझे 'setTimeout' फ़ंक्शन' के भीतर 'someElement.is (': focus')' या '$ (': focus') 'रखना होगा, धुंध से ट्रिगर हैंडलर, कुछ ब्राउज़रों को अगले तत्व पर ध्यान केंद्रित करने का मौका देने के लिए। –

9

एक ईवेंट हैंडलर के अंदर, this तत्व घटना के लिए बाध्य है हो जाएगा, और e.target तत्व यह है कि घटना (या this के रूप में ही नहीं हो सकता है) शुरू हो रहा होगा।

आप blur ईवेंट सौंप रहे हैं, click ईवेंट नहीं। तो, आपके ईवेंट के अंदर, आपके पास वह तत्व होगा जो आप blur एड। यदि आप click एड तत्व चाहते हैं, तो आपको इसे प्राप्त करने के लिए एक और ईवेंट की आवश्यकता होगी।

blur अन्य घटनाओं द्वारा ट्रिगर किया जा सकता है, जैसे कुछ ध्यान केंद्रित करना; बस कुछ पर क्लिक नहीं। तो, तत्व को पाने का कोई तरीका नहीं है कि "धुंध का कारण बन गया"।

+0

यह सच नहीं है कि कोई रास्ता नहीं है। इस उत्तर का संदर्भ लें: http://stackoverflow.com/a/11544589/1450294 –

38

चाल एक अतिरिक्त टिक प्रतीक्षा करने के लिए है: यदि मैं आपके सवाल का सही ढंग से समझ

$(el).blur(function (event) { 
    // If we just hangout an extra tick, we'll find out which element got focus really 
    setTimeout(function(){ 
     document.activeElement; // This is the element that has focus 
    },1); 
}) 
+1

मैंने पाया कि 'setTimeout' को अन्य' क्लिक 'ईवेंट को आग लगाने की अनुमति देने के लिए एक स्पष्ट विलंब की आवश्यकता है; मेरे लिए भी (jQuery 1.8) 'document.activeElement'' body' था, जो बहुत उपयोगी नहीं था :) – drzaus

+0

यह क्रोम 30 और फ़ायरफ़ॉक्स में ठीक काम करता है 19. –

+0

यह काम IE9 + और अन्य अच्छे ब्राउज़रों में करता है? – chovy

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