Keypress en jQuery: Appuyez sur l'ONGLET à l'intérieur de la balise TEXTAREA (lors de la modification d'un texte existant)
Je veux insérer des caractères de TABULATION à l'intérieur d'un TEXTAREA, comme ceci:
<textarea>{KEYPRESS-INSERTS-TAB-HERE}Hello World</textarea>
Je peux insérer avant/après l'existant TEXTAREA texte - et je peux insérer /remplacer tout le texte dans le TEXTAREA - mais n'ont pas encore été en mesure d'insérer à l'intérieur de l'existant TEXTAREA texte (par le curseur) d'une manière simple.
$('textarea:input').live('keypress', function(e) {
if (e.keyCode == 9) {
e.preventDefault();
//Press TAB to append a string (keeps the original TEXTAREA text).
$(this).append("TAB TAB TAB AFTER TEXTAREA TEXT");
//Press TAB to append a string (keeps the original TEXTAREA text).
$(this).focus().prepend("TAB TAB TAB BEFORE TEXTAREA TEXT");
//Press TAB to replace a all text inside TEXTAREA.
$(this).val("INSERT INTO TEXTAREA /REPLACE EXISTING TEXT");
}
});
Il y a un "onglets dans le textarea" plug-in jQuery ("Tabby") - mais c'est 254 lignes de code - j'espérais juste quelques lignes de code.
Quelques liens que j'ai étudié: (encore une fois, je préfère moins de lignes de code).
http://www.dynamicdrive.com/forums/showthread.php?t=34452
http://www.webdeveloper.com/forum/showthread.php?t=32317
http://pallieter.org/Projects/insertTab/
Veuillez en informer. Merci.
OriginalL'auteur Kristoffer Bohmann | 2009-11-15
Vous devez vous connecter pour publier un commentaire.
J'ai été la création d'un AJAX alimenté simple IDE pour moi afin que je puisse rapidement tester PHP extraits.
Je me souviens de tomber sur le même problème, voici comment je l'ai résolu:
#input
est l'ID du textarea.Le code n'est pas complètement le mien, je l'ai trouvé sur Google quelque part.
Je ne l'ai testé sur FF 3.5 et IE7. Il ne fonctionne pas sur IE7 malheureusement.
J'ai dû remplacer
keypress
aveckeydown
pour obtenir que cela fonctionne dans Chrome.Très bon, bien mieux que d'autres exemples d'utilisation des tonnes de code! J'ai dû remplacer la pression de touche... demandais si on pouvait suffire avec une seule pression de touche.
pouvez-vous changer la pression de touche dans un keydown dans votre code?
OriginalL'auteur Waleed Amjad
Malheureusement, la manipulation du texte à l'intérieur textarea éléments n'est pas aussi simple qu'on pourrait l'espérer. La raison qui Tabby est plus grande que celles de simples extraits, c'est qu'il fonctionne mieux. Il a une meilleure compatibilité inter-navigateur et gère des choses comme la tabulation des sélections.
Quand minifiés, il n'est que d'environ 5 km. Je vous suggère de l'utiliser. Vous devrez vous de découvrir et de résoudre ces mêmes cas de bord vous-même, ou pourrait même ne pas les connaître si les utilisateurs n'ont pas de rapport entre eux.
+1 Dave, Oui, j'ai réalisé que ce qui semble simple tâche a été assez difficile. Je vais réfléchir Tabby dois-je besoin d'un navigateur compatible solution. Merci. /Kristoffer 🙂
OriginalL'auteur Dave Ward
Ouais, traitant du champ de saisie de sélections à travers les différents navigateurs est une gêne, d'autant que dans IE, il ya quelques méthodes que look comme ils devraient travailler mais n'ont pas réellement. (Notamment, en les combinant à l'aide de
setEndPoint
puis de mesurerlength
, qui semble OK jusqu'à ce que la sélection commence ou se termine dans les retours à la ligne.)Voici un couple de fonctions d'utilité-je utiliser pour traiter avec la participation des sélections. Elle retourne la valeur de l'entrée split en morceaux qui sont devant, à l'intérieur et à l'issue de la sélection (avec la sélection de comptage comme une chaîne vide à l'entrée position de mise au point si ce n'est pas un choix). Cela rend assez simplement à remplacer et insérer du contenu à l'endroit que vous voulez, tout en prenant soin de l'IE CRLF problème.
(Il y a peut être un jQuery qui fait quelque chose comme cela, mais je n'ai pas encore rencontré un seul.)
getPartitionedValue
donne une erreur dans IE sur lerange.moveToElementText(input);
ligne pour<input>
éléments (c'est bien pour les textareas).Vous pouvez résoudre ce problème en remplaçant la ligne incriminée avec
var inputRange = input.createTextRange(); range.moveToBookmark(inputRange.getBookmark());
OriginalL'auteur bobince
btw, voir aussi:
http://aspalliance.com/346_Tabbing_in_the_TextArea
OriginalL'auteur Kristoffer Bohmann