2011-05-27 7 views
5

¿Cómo determinar el evento de enfoque en jQuery si se dispara el foco en click event o tabstop? Tengo este evento de enfoque que si el foco se dispara por una tabstop ejecutaré algo y si es un clic no lo ejecutaré.determinar el evento de foco: clic o tabstop

Aquí hay un pseudo código

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

no tengo una respuesta concreta, pero una forma podría ser utilizar la pulsación de tecla '()' evento para almacenar el tiempo la tecla Tab última pulsación, y si fue hace muy poco tiempo, puede estar bastante seguro de que es una tabulación. Además, para detectar un clic, ligue al evento click. No estoy seguro de cuál se ejecuta primero, pero tal vez establecer un elemento de datos en el elemento en el controlador de clics y buscar ese elemento de datos en el controlador de enfoque sería otro camino por recorrer. – GregL

+0

El evento 'focus' siempre se dispara antes del' click', pero 'mousedown' se dispara antes de' focus'. – DarthJDG

Respuesta

7

Si se hace clic en un elemento, los mousedown desencadena el evento antes de foco. Solo necesita establecer un atributo de datos y verificarlo en el evento de enfoque.

Prueba esta demo: 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 
    } 
}); 
Cuestiones relacionadas