2011-10-19 7 views
5

Actualmente estoy usando el enfoque en un elemento de formulario específico para saber cuándo un usuario ha insertado una pestaña o ha hecho clic en un campo diferente.Detecta si el enfoque se debe a una pulsación de tecla o un clic

Necesito saber esto porque una llamada ajax se inicia inmediatamente después de esto y llena varios campos diferentes (por ejemplo, ingresa un código postal válido, busca una base de datos y vuelve con la ciudad).

Ahora, mi pregunta, la llamada ajax recibe una respuesta html y al cargarla, hace que la forma pierda su foco actual.

Necesito una forma de guardar ese enfoque y restablecerlo después de la llamada ajax.

Hasta ahora, he obtenido la navegación para el tipo de trabajo. Se rompe mucho y también interfiere con la carga de otras cosas en la página (por ejemplo, ventanas de diálogo). Entonces, me imagino que tiene que haber una mejor manera de hacerlo, y es por eso que estoy aquí. Déjeme saber si usted necesita más información. El código está abajo.

¡Todo lo mejor!

$('.DZipCode').focusout(function() { 
     var ZipCode = $('.DZipCode').val(); 


    $.ajax({ // create an AJAX call... 
     async: false, 
     type: "POST", // GET or POST 
     url: "/Home/SelectZipCodeDataDestination", // the file to call` 
     data: { zipCode: ZipCode }, 
     success: function (response) { // on success.. 
      $(":input").focus(function() { 
       var prevFocus; 

       prevFocus = $(this).attr("id"); 
       $('#quotetab').html(response); 
       $('#'+prevFocus).focus(); 
      // });    
     } // end of success 
    }); // end of .ajax 

});

Respuesta

6

La manera más fácil que puedo pensar es establecer una bandera cuando se presiona una tecla, luego simplemente verifique la bandera cada vez que lo necesite.

var tabPressed = false; 

$('input[type="text"], textarea') 
    .keydown(function(e) { 
     var keyCode = e.keyCode || e.which; 

     tabPressed = (keyCode==9) ? true : false; 
    }) 
    .focus(function() { 
     tabPressed = false; 
    }); 

A continuación, puede hacer

if(tabPressed) { 
//some stuff 
} 

en su devolución de llamada ajax éxito (o donde sea).

+0

Tomó un poco más para ponerlo en marcha, pero la dirección era definitivamente buena. Por algún motivo, la respuesta de la llamada ajax restablecía mi variable tabPressed a falso. Terminé simplemente almacenando su valor dentro de una variable secundaria dentro de la función de salida. ¡Gracias por la ayuda! –

Cuestiones relacionadas