2011-05-27 13 views
5

यदि क्लिक ईवेंट या टैबस्टॉप पर फ़ोकस निकाल दिया गया है तो jQuery पर फ़ोकस ईवेंट कैसे निर्धारित करें? मेरे पास यह फोकस इवेंट है कि अगर किसी टैबस्टॉप द्वारा फ़ोकस निकाल दिया जाता है तो मैं कुछ निष्पादित कर दूंगा और यदि यह एक क्लिक है तो मैं इसे निष्पादित नहीं करूंगा।फ़ोकस ईवेंट निर्धारित करें: क्लिक करें या टैबस्टॉप

यहाँ एक छद्म कोड

$('a').focus(function(){ 
    if(ThisIsTabStop()) { 
     IWillExecuteThis(); 
    } 
}); 
+2

मैं एक ठोस उत्तर नहीं है, लेकिन एक तरह से समय टैब कुंजी पिछले दबाया था स्टोर करने के लिए 'कुंजी दबाने()' घटना उपयोग करने के लिए हो सकता है, और अगर यह बहुत ही कम समय पहले था, तो आप काफी विश्वास कर सकते हैं कि यह एक टैब स्टॉप है। साथ ही, एक क्लिक का पता लगाने के लिए, क्लिक ईवेंट से जुड़ें। मुझे यकीन नहीं है कि कौन पहले निष्पादित करता है, लेकिन क्लिक हैंडलर में तत्व पर डेटा आइटम सेट करना और फोकस हैंडलर में उस डेटा आइटम की जांच करना एक और तरीका होगा। – GregL

+0

'फोकस' घटना हमेशा 'क्लिक' से पहले आग लगती है, लेकिन 'mousedown' 'फोकस' से पहले आग लगती है। – DarthJDG

उत्तर

7

तो एक तत्व क्लिक किया जाता है, ध्यान से पहले mousedown घटना आग है। आपको बस एक डेटा विशेषता सेट करने की आवश्यकता है, और इसे फोकस ईवेंट में जांचें।

इस डेमो का प्रयास करें: http://jsfiddle.net/KcGcF/1/

$('a').mousedown(function(e){ 
    var $this = $(this); 

    // Only set the data attribute if it's not already focused, as the 
    // focus event wouldn't fire afterwards, leaving the flag set. 
    if(!$this.is(':focus')){ 
     $this.data('mdown',true); 
    } 
}); 

$('a').focus(function(e){ 
    var $this = $(this); 
    var mdown = $this.data('mdown'); 

    // Remove the flag so we don't have it set next time if the user 
    // uses the tab key to come back. 
    $this.removeData('mdown'); 

    // Check if the mousedown event fired before the focus 
    if(mdown){ 
     // Click 
    } else { 
     // Tab 
    } 
}); 
संबंधित मुद्दे