Extrait de la position du curseur du clavier de Josh Stodola dans une zone de texte ou zone de texte avec Javascript
Une fonction générique qui vous permettra d'insérer le curseur à n'importe quelle position d'une zone de texte ou d'une zone de texte que vous souhaitez:
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
Le premier paramètre attendu est l'ID de l'élément sur lequel vous souhaitez insérer le curseur du clavier. Si l'élément est introuvable, rien ne se passera (évidemment). Le deuxième paramètre est l'indice de position caret. Zéro mettra le curseur du clavier au début. Si vous passez un nombre plus grand que le nombre de caractères dans la valeur des éléments, cela placera le curseur du clavier à la fin.
Testé sur IE6 et plus, Firefox 2, Opera 8, Netscape 9, SeaMonkey et Safari. Malheureusement, sur Safari, cela ne fonctionne pas en combinaison avec l'événement onfocus).
Un exemple d'utilisation de la fonction ci-dessus pour forcer le curseur du clavier à sauter à la fin de toutes les zones de texte de la page lorsqu'ils reçoivent le focus:
function addLoadEvent(func) {
if(typeof window.onload != 'function') {
window.onload = func;
}
else {
if(func) {
var oldLoad = window.onload;
window.onload = function() {
if(oldLoad)
oldLoad();
func();
}
}
}
}
// The setCaretPosition function belongs right here!
function setTextAreasOnFocus() {
/***
* This function will force the keyboard caret to be positioned
* at the end of all textareas when they receive focus.
*/
var textAreas = document.getElementsByTagName('textarea');
for(var i = 0; i < textAreas.length; i++) {
textAreas[i].onfocus = function() {
setCaretPosition(this.id, this.value.length);
}
}
textAreas = null;
}
addLoadEvent(setTextAreasOnFocus);
if(elem.selectionStart)
s'arrête lorsque selectionStart vaut 0 comme l'a également souligné la réponse de jhnns.elem.value = elem.value.replace(/^9/g,'+79')
dans le code. Sur le curseur OperaMINI après+
. cette fonction n'aide pasLe lien dans la réponse est cassé, celui-ci devrait fonctionner (tous les crédits vont à blog.vishalon.net ):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
Au cas où le code se perd à nouveau, voici les deux fonctions principales:
la source
Étant donné que j'avais vraiment besoin de cette solution et que la solution de base typique ( concentrer l'entrée - puis définir la valeur égale à elle-même ) ne fonctionne pas entre les navigateurs , j'ai passé du temps à tout peaufiner et à modifier pour que cela fonctionne. En s'appuyant sur le code de @ kd7 , voici ce que j'ai trouvé.
Prendre plaisir! Fonctionne dans IE6 +, Firefox, Chrome, Safari, Opera
Technique de positionnement du curseur cross-browser (exemple: déplacement du curseur vers END)
La viande et les pommes de terre est fondamentalement setCaretPosition de @ kd7 , le plus gros ajustement étant
if (el.selectionStart || el.selectionStart === 0)
, dans Firefox, selectionStart commence à 0 , ce qui en booléen devient bien sûr False, donc ça cassait là.Dans Chrome, le plus gros problème était que le donner
.focus()
ne suffisait pas (il continuait à sélectionner TOUT le texte!) Par conséquent, nous définissons la valeur de lui-même, à lui-mêmeel.value = el.value;
avant d'appeler notre fonction, et maintenant il a une prise et une position avec le entrée pour utiliser selectionStart .la source
.onclick
place de l'.onfocus
intérieur de votre fonction search_field_focusel.value = el.value; [...] if(el !== null)
- J'échangerais ces deux lignes. Siel
est nul,el.value = el.value
échouera, donc cette ligne doit être à l'intérieur duif
.J'ai ajusté un peu la réponse de kd7 car elem.selectionStart évaluera à false lorsque selectionStart est accessoirement 0.
la source
J'ai trouvé un moyen simple de résoudre ce problème, testé dans IE et Chrome:
Passez l'identifiant de la zone de texte et la position du curseur à cette fonction.
la source
Si vous avez besoin de concentrer une zone de texte et que votre seul problème est que tout le texte est mis en surbrillance alors que vous voulez que le curseur soit à la fin, alors dans ce cas spécifique, vous pouvez utiliser cette astuce pour définir la valeur de la zone de texte sur elle-même après la mise au point:
la source
la source
la source
tID
doit être l'identifiant de l'élément, pas l'objet d'élément lui-même. Si vous passez l'objet élément, vous pouvez simplement supprimer les 2 premières lignes de cette méthode, et cela fonctionnera.Je fixerais les conditions comme ci-dessous:
la source