J'ai un champ de texte qui est enveloppé dans un div d'erreur lorsque l'utilisateur soumet ou met au point une entrée invalide. Je voudrais supprimer le wrapper si l'utilisateur corrige son erreur, cependant, la méthode unwrap()
provoque la perte de focus du champ.jQuery: Textfield perd son focus sur unwrap()
$(special_input).live('keyup', function() {
if (input_okay && input_had_errors) {
$(this).unwrap();
}
});
Pas grand-chose, je peux réinitialiser la mise au point et il fonctionne très bien ...
$(this).unwrap().focus();
... partout, mais dans IE! J'ai essayé d'insérer une fonction setTimeOut()
dans la fonction ci-dessus pour contourner le manque de support d'IE pour le bouillonnement de l'événement focus()
, et cela fonctionne ... un peu. Le seul problème est qu'il place le curseur au début de tout ce qui est tapé plutôt que de la fin. (QUOI ?!)
Réinitialiser le focus semble un peu moche de toute façon. Y at-il un moyen de garder unwrap()
de le désamorcer en premier lieu?
Merci.
Kinda solution:
Pour les raisons Ender et insaisissable a fait remarquer, je viens décidé de résoudre le problème du curseur déplacé, ce qui peut être fait en remettant à zéro la valeur du champ de texte après se concentrant sur encore une fois. Le code ressemble à ceci maintenant.
$(this).unwrap();
setTimeout(function() { $(this).focus().val($(this).val()); }, 5);
Gar. Merci pour l'information. Je n'avais pas réalisé que c'était comme ça que ça fonctionnait, mais je suppose que ça aurait pu marcher autrement? Je suppose comme une alternative, je vais essayer d'obtenir ce curseur à la fin du champ de texte dans IE ... – hellodally