2011-05-27 19 views
5

Odak olayı tıklama olayı veya sekmeli sekmede tetiklendiğinde jQuery'de odak olayı nasıl belirlenir? Bu odaklama olayım var, eğer odak bir tabstop tarafından işlenirse, bir şey yürütebilirim ve eğer bir tıklama ise onu yürütmeyeceğim.odak olayını belirler: click veya tabstop

İşte sahte kod bir eleman tıklandığında ise

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

ancak tek yönlü Tab tuşuna basılı son ne zaman saklamak için 'tuşa basma()' olay kullanmak olabilir ve:

bu demo deneyin Çok kısa bir süre önce olsaydı, bir sekme durağı olduğundan emin olabilirsiniz. Ayrıca, bir tıklamayı saptamak için tıklama etkinliğine bağlayın. Öncelikle hangisinin daha önce yürütüldüğünden emin değilim, ancak belki de tıklama işleyicisindeki öğeye bir veri öğesi ayarlayıp, odak işleyicisindeki bu öğeyi kontrol etmenin başka bir yolu olacağını söyleyebilirim. – GregL

+0

'focus' olayı her zaman' click''den önce tetiklenir, ancak 'mousedown'' focus''dan önce patlar. – DarthJDG

cevap

7

, odak önce mousedown olay yangınları var. Bir veri niteliği ayarlamanız ve odak etkinliğinde kontrol etmeniz yeterlidir. Ben somut bir cevabı yok 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 
    } 
}); 
İlgili konular