J'ai besoin de trouver un moyen de détecter si un espace a été supprimé ou renvoyé et exécuter une fonction si tel est le cas. Je travaille sur ceci à JavaScript / jquery.
Je sais que je peux obtenir la touche Supprimer ou retour de l'espace de retour Appuyez à l'aide de: P>
$(this).keyup(function(event) { event.keyCode
4 Réponses :
Bind to the Keydown et comparer la valeur d'avant et après pour voir s'il est réduit de taille.
$("input").keydown(function() { var currVal = this.value, self = this; setTimeout(function() { if (currVal.length - self.value.length === 1) { var origVal = $.grep(currVal.split(""),function(val){ return val === " "; }); var newVal = $.grep(self.value.split(""),function(val){ return val === " "; }); if ( origVal.length != newVal.length ) { console.log("a space was removed"); } } }, 0); });â
Cela ne répond pas à la question de l'OP.
@Shmiddty: Oui, c'est que tout renvoi d'un espace via n'importe quelle méthode apparaîtra ici.
Il n'y a rien ici pour déterminer si un espace a été supprimé ou non. Cela vous permet de savoir quand un caractère a été supprimé.
S'il voulait le réduire uniquement à la touche Suppr Town and BackSpace, il devra simplement regarder l'événement .Quelle code> propriété.
@Shmiddty Le seul moyen de le faire serait d'ajouter une boucle à travers chaque personnage pour voir si le personnage qui a été supprimé était un espace. Avant d'écrire quelque chose comme ça, je préférerais avoir des éclaircissements de l'OP.
Cela ne me dis-je pas que si la chaîne dans son ensemble a été réduite de taille? Comment cela va-t-il me dire si un espace était simplement supprimé ou renvoyé afin que je puisse exécuter une fonction dans ce cas?
@Baxter, vous devriez faire boucler chaque personnage de la chaîne jusqu'à ce que vous trouviez celui (ou plusieurs) qui a été supprimé. Cela nécessite-t-il de gérer le cas où plus de 1 caractère est enlevé avec l'un d'entre eux étant un espace?
La dernière mise à jour détecte si un seul espace a été supprimé par un moyen.
Cache La valeur à l'avance (définissez une valeur sur la touchePress) et comparez la valeur après la touche. C'est le seul moyen de savoir avec certitude qu'un ou plusieurs espaces a été supprimé. Toute vérification des clés s'appuie sur vous pour pouvoir déterminer quelles clés possibles pourraient obtenir la suppression d'un espace et laisseront probablement des trous. P>
À titre d'exemple, sélectionnez la dernière lettre d'un mot et de l'espace qui suit, si nous appuyons sur la dernière lettre, elle supprimera l'espace. Mais la touche appuyée n'est pas une cassette arrière ou une suppression. P>
C'est bien, tous les autres caractères appellent la fonction sur le porte-clés (). Je souhaite traiter de manière arrière et supprimer différemment et n'appeler que la fonction si la suppression ou la backpace supprima un espace, sinon je veux ignorer ces commandes.
Pouvez-vous fournir un exemple de la manière dont je pourrais mettre en cache la valeur à l'avance et comparer avec la valeur après la touche de frappe?
@Kevinb: En effet. J'ai vu votre réponse apparaître alors que je postais le mien et cela fait exactement cela. Pourrait peut-être le rendre synchrone en messionnant avec l'événement.Prototype et l'attraper une seconde fois dans la bulle d'événement, mais ce serait beaucoup plus d'effort et douteux.
Voir ici: http://jsfiddle.net/txseh/ Il suit le nombre actuel de caractères blouses dans l'entrée, et si jamais le numéro tombe en panne, il alerte (ou fait ce que vous voulez). P> P>
Lorsque vous détectez une colonne vertébrale ou une touche DELETE, vous avez appuyé sur la position actuelle du caret dans votre élément d'entrée et vérifiez si vous êtes avant / après qu'il s'agisse d'un espace qui sera supprimé?
Avez-vous besoin de net détecter que de l'espace ou il pourrait être mélangé avec du texte?
@ Dmi3y, je n'ai besoin que de détecter un espace enlevé. J'ai autre chose qui gère plusieurs caractères.
Et si un espace et un personnage ont été supprimés? Pourquoi auriez-vous besoin de détecter ces deux choses séparément? Cela ne serait-il pas plus logique de détecter à la fois?
De quoi s'agit-il exactement? Pouvez-vous ajouter un contexte?
@Kevinb Je travaille sur un plugin JQuery pour compter / limiter les mots numériques dans une Textarea. Voici le code du plug-in tel qu'il est maintenant: Pastebin.com/QEBPWKN1
Pour limiter l'utilisateur de saisir plus de caractères, la valeur du textarea est réinitialisée à obj.val (limitée); Si l'utilisateur est> = la limite. Cela fonctionne bien, à l'exception du moment où j'ai atteint la limite de mot et déplacez mon curseur en un mot au milieu de la chaîne de mot et essayez de backspace / supprimer un mot. Étant donné que la limite de mot est remplie, il continue à tirer la fonction WordCount () et à déplacer mon curseur jusqu'à la fin du dernier mot. Je pensais donc que ma pensée était d'ignorer le backpace / Supprimer à moins qu'ils ne retirent un espace qui est la division entre tous les mots, à ce stade, je voudrais rétablir le nombre de mots.
@Baxter avec cela à l'esprit, ma clé avec Settimeout ne fonctionnera pas car au moment où vous détectez que c'est l'espace supprimé, l'événement s'est déjà produit ce qui signifie que vous ne pouvez pas empêcher l'événement, vous ne pouvez peut-être pas défaire. dans le point d'insertion allant à la fin.