2011-10-19 8 views
5

Attualmente sto utilizzando il focusout su un elemento di modulo specifico per sapere quando un utente ha effettuato una tabulazione in avanti o ha fatto clic su un campo diverso.Rileva se il focusout è dovuto a una pressione di tasto o a un clic

Ho bisogno di sapere questo perché una chiamata ajax si avvia subito dopo e popola diversi campi diversi (ad esempio, inserisci un codice postale valido, cerca un db e torna con la città).

Ora, la mia domanda, la chiamata ajax riceve una risposta HTML e al momento del caricamento, il modulo perde il focus corrente.

Ho bisogno di un modo per salvare quella messa a fuoco e ripristinarla dopo la chiamata Ajax.

Finora, ho ottenuto la navigazione per tipo di lavoro. Si rompe molto e interferisce anche con il caricamento di altre cose nella pagina (ad esempio finestre di dialogo). Quindi, immagino ci debba essere un modo migliore per farlo, ed è per questo che sono qui. Fammi sapere se hai bisogno di ulteriori informazioni. Il codice è sotto

Tutto il meglio!

$('.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 

});

risposta

6

Il modo più semplice che riesco a pensare è di impostare un flag quando viene premuto un tasto, quindi basta controllare la bandiera ogni volta che è necessario sapere.

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; 
    }); 

Poi si può fare

if(tabPressed) { 
//some stuff 
} 

nel callback successo ajax (o dovunque).

+0

Ci è voluto un po 'di più per farlo funzionare, ma la direzione era decisamente sana. Per qualche ragione, la risposta dalla chiamata ajax stava ripristinando la mia variabile tabPressed su false. Ho finito per archiviare il suo valore all'interno di una variabile secondaria all'interno della funzione focusout out. Grazie per l'aiuto! –

Problemi correlati