changement d’événement non déclenché sur la clé de retour

J’ai une zone de texte avec un événement de changement jQuery lié.

$('#txtAccountNo').change(function(){ $('label[for="txtAccountNo"]').append('loading...') }); 

L’événement fonctionne lorsque la zone de texte perd le focus, c’est-à-dire que l’utilisateur clique dessus avec la souris ou utilise la touche de tabulation. Mais lorsque la touche Retour est enfoncée, l’événement n’est pas déclenché. Quelqu’un peut-il m’aider à résoudre ceci s’il vous plaît?

C’est le comportement standard pour l’événement change . Si vous souhaitez capturer chaque pression sur la keypress Entrée , vous devez utiliser l’événement de keypress :

 $('#txtAccountNo').on('change keypress', function(e) { if (e.type == 'change' || (e.type == 'keypress' && e.which == 13)) { $('label[for="txtAccountNo"]').append('loading...') } }); 

Comme vous l’avez souligné, l’événement de change n’est déclenché que lorsqu’une entrée de texte perd le focus. Vous devriez plutôt vous keyup à keyup :

 $('#txtAccountNo').on('keyup', function() { $('label[for="txtAccountNo"]').append('loading...') }); 

En tant que post-scriptum, il est probablement sage de conserver également l’événement change , car vous voudrez probablement également exécuter la fonctionnalité lorsque quelqu’un colle du texte dans la zone de texte. Vous pouvez le faire en utilisant:

 $('#txtAccountNo').on('keyup change', function() { ... }); 

En fait, dans les navigateurs modernes, et jQuery (qui semble être utilisé dans la question) supérieur à 1,7, le bouton de retour validera la modification sans qu’il soit nécessaire de perdre le focus, le code devrait fonctionner.

  $("input").change( function() { $("output").val( $("input").val() ); }) 

Découvrez le test simple ici: http://jsfiddle.net/4vBSm/2/

Cela ne se produit pas dans IE 9 et inférieur cependant. (Et jQuery ne va pas résoudre ce problème http://bugs.jquery.com/ticket/11556 )

Comme indiqué dans la réponse de Matthew, le problème se pose dans IE9 et les versions antérieures, mais pas dans les navigateurs modernes. Je suggérerais la solution ci-dessous, qui appenda simplement cette fonctionnalité à tous les navigateurs:

 $('input[type=text]').on('keypress', function (e) { var $input = $(this); if (e.which == 13) { // Enter was hit $input.sortinggger('change'); } }); 

Il écoute les touches sur les entrées de texte et, si vous appuyez sur Entrée , il déclenche un événement de modification.