[firefow] Scrolling jusqu'à une lettre spécifique dans un textarea.
11 réponses
Bipède
Bonjour.
A tout hasard je vous pose la question malgrès que cela fasse prés de
deux jours que je cherche absolument partout sur internet une réponse.
Je voudrais être capable de faire défiler la fenètre d'une textarea sous
firefox de façon à ce que la selection créer en Javascript
(textarea.setSelectionRange()) soit visible. Cela semble impossible si
ce n'est en utilisant la propriété scrollTop de l'objet qui
malheureusement est en pixels (mais de toute façon même s'il s'agissait
de lignes il faudrait tenir compte du fait que le texte est "wrapé").
Je voudrais être capable de faire défiler la fenètre d'une textarea sous firefox de façon à ce que la selection créer en Javascript (textarea.setSelectionRange()) soit visible. Cela semble impossible si ce n'est en utilisant la propriété scrollTop de l'objet qui malheureusement est en pixels
je suppose que le truc bebete ici = textarea.setSelectionRange(); ici.focus(); a été essayé ?
-- Stephane Moriaux et son [moins] vieux Mac
Je voudrais être capable de faire défiler la fenètre d'une textarea sous
firefox de façon à ce que la selection créer en Javascript
(textarea.setSelectionRange()) soit visible. Cela semble impossible si
ce n'est en utilisant la propriété scrollTop de l'objet qui
malheureusement est en pixels
je suppose que le truc bebete
ici = textarea.setSelectionRange();
ici.focus();
a été essayé ?
Je voudrais être capable de faire défiler la fenètre d'une textarea sous firefox de façon à ce que la selection créer en Javascript (textarea.setSelectionRange()) soit visible. Cela semble impossible si ce n'est en utilisant la propriété scrollTop de l'objet qui malheureusement est en pixels
je suppose que le truc bebete ici = textarea.setSelectionRange(); ici.focus(); a été essayé ?
-- Stephane Moriaux et son [moins] vieux Mac
Bipède
ASM wrote:
Je voudrais être capable de faire défiler la fenètre d'une textarea sous firefox de façon à ce que la selection créer en Javascript (textarea.setSelectionRange()) soit visible. Cela semble impossible si ce n'est en utilisant la propriété scrollTop de l'objet qui malheureusement est en pixels
je suppose que le truc bebete ici = textarea.setSelectionRange(); ici.focus(); a été essayé ?
Non, mais de toute façon la méthode setSelectionRange(debut,fin) ne retourne rien (void). Hélas.
ASM wrote:
Je voudrais être capable de faire défiler la fenètre d'une textarea
sous firefox de façon à ce que la selection créer en Javascript
(textarea.setSelectionRange()) soit visible. Cela semble impossible si
ce n'est en utilisant la propriété scrollTop de l'objet qui
malheureusement est en pixels
je suppose que le truc bebete
ici = textarea.setSelectionRange();
ici.focus();
a été essayé ?
Non, mais de toute façon la méthode setSelectionRange(debut,fin) ne
retourne rien (void). Hélas.
Je voudrais être capable de faire défiler la fenètre d'une textarea sous firefox de façon à ce que la selection créer en Javascript (textarea.setSelectionRange()) soit visible. Cela semble impossible si ce n'est en utilisant la propriété scrollTop de l'objet qui malheureusement est en pixels
je suppose que le truc bebete ici = textarea.setSelectionRange(); ici.focus(); a été essayé ?
Non, mais de toute façon la méthode setSelectionRange(debut,fin) ne retourne rien (void). Hélas.
Laurent Vilday
Je voudrais être capable de faire défiler la fenètre d'une textarea sous firefox de façon à ce que la selection créer en Javascript (textarea.setSelectionRange()) soit visible.
D'après la doc XUL, il est écrit qu'il faut mettre les paramètre start et end à la meme valeur pour faire déplacer le curseur. Mais bon, ça doit marcher que sur les éléments XUL, en tout cas ça passe pas sur un textarea dans un document HTML4.01T http://developer.mozilla.org/en/docs/XUL:Method:setSelectionRange
Cela semble impossible si ce n'est en utilisant la propriété scrollTop de l'objet qui malheureusement est en pixels (mais de toute façon même s'il s'agissait de lignes il faudrait tenir compte du fait que le texte est "wrapé").
Ou encore, utiliser le fait qu'un keypress provoque le déplacement du curseur. C'est tiré par les cheveux, mais ça marche sur Fx1.5.0.4.
disons qu'on veuille sélectionner de la position 10 (s) à 15 (e)
var s = 10; var e = 15;
// 1) il nous faut la référence de notre textarea var element = document.getElementById('mon_textarea');
// 2) on lui donne le focus element.focus()
// 3) on sélectionne le caractère à la position 10 (de s à s+1) element.setSelectionRange(s, s+1);
// 4) on créé l'event qui va être utilisé pour faire défiler // jusqu'au curseur var evt = document.createEvent('KeyEvents');
// 6) on dispatch l'event, ce qui provoque le scrolling element.dispatchEvent(evt);
// 7), pour finir on sélectionne la plage désirée element.setSelectionRange(s, e);
Et voilà, on à scroller dans le textarea sans ScrollTop :D
http://mokhet.com/tests/setselectionrange.html
-- laurent
Je voudrais être capable de faire défiler la fenètre d'une textarea sous
firefox de façon à ce que la selection créer en Javascript
(textarea.setSelectionRange()) soit visible.
D'après la doc XUL, il est écrit qu'il faut mettre les paramètre start
et end à la meme valeur pour faire déplacer le curseur. Mais bon, ça
doit marcher que sur les éléments XUL, en tout cas ça passe pas sur un
textarea dans un document HTML4.01T
http://developer.mozilla.org/en/docs/XUL:Method:setSelectionRange
Cela semble impossible si
ce n'est en utilisant la propriété scrollTop de l'objet qui
malheureusement est en pixels (mais de toute façon même s'il s'agissait
de lignes il faudrait tenir compte du fait que le texte est "wrapé").
Ou encore, utiliser le fait qu'un keypress provoque le déplacement du
curseur. C'est tiré par les cheveux, mais ça marche sur Fx1.5.0.4.
disons qu'on veuille sélectionner de la position 10 (s) à 15 (e)
var s = 10;
var e = 15;
// 1) il nous faut la référence de notre textarea
var element = document.getElementById('mon_textarea');
// 2) on lui donne le focus
element.focus()
// 3) on sélectionne le caractère à la position 10 (de s à s+1)
element.setSelectionRange(s, s+1);
// 4) on créé l'event qui va être utilisé pour faire défiler
// jusqu'au curseur
var evt = document.createEvent('KeyEvents');
Je voudrais être capable de faire défiler la fenètre d'une textarea sous firefox de façon à ce que la selection créer en Javascript (textarea.setSelectionRange()) soit visible.
D'après la doc XUL, il est écrit qu'il faut mettre les paramètre start et end à la meme valeur pour faire déplacer le curseur. Mais bon, ça doit marcher que sur les éléments XUL, en tout cas ça passe pas sur un textarea dans un document HTML4.01T http://developer.mozilla.org/en/docs/XUL:Method:setSelectionRange
Cela semble impossible si ce n'est en utilisant la propriété scrollTop de l'objet qui malheureusement est en pixels (mais de toute façon même s'il s'agissait de lignes il faudrait tenir compte du fait que le texte est "wrapé").
Ou encore, utiliser le fait qu'un keypress provoque le déplacement du curseur. C'est tiré par les cheveux, mais ça marche sur Fx1.5.0.4.
disons qu'on veuille sélectionner de la position 10 (s) à 15 (e)
var s = 10; var e = 15;
// 1) il nous faut la référence de notre textarea var element = document.getElementById('mon_textarea');
// 2) on lui donne le focus element.focus()
// 3) on sélectionne le caractère à la position 10 (de s à s+1) element.setSelectionRange(s, s+1);
// 4) on créé l'event qui va être utilisé pour faire défiler // jusqu'au curseur var evt = document.createEvent('KeyEvents');
[...] Et voilà, on à scroller dans le textarea sans ScrollTop :D
http://mokhet.com/tests/setselectionrange.html
C'est toi mon héros ! Ca marche, bravo et un grand merci !
Bipède
Laurent Vilday wrote:
[...] Et voilà, on à scroller dans le textarea sans ScrollTop :D
http://mokhet.com/tests/setselectionrange.html
J'ai un peu changer ta solution :
var ss = txtarea.selectionStart; var se = txtarea.selectionEnd; var evt = document.createEvent('KeyEvents'); txtarea.setSelectionRange(ss,ss); evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keyup',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keypress',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); txtarea.setSelectionRange(ss,se);
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Bref, le DOM (Document Object Merdier) reste le DOM.
Laurent Vilday wrote:
[...]
Et voilà, on à scroller dans le textarea sans ScrollTop :D
http://mokhet.com/tests/setselectionrange.html
J'ai un peu changer ta solution :
var ss = txtarea.selectionStart;
var se = txtarea.selectionEnd;
var evt = document.createEvent('KeyEvents');
txtarea.setSelectionRange(ss,ss);
evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0);
txtarea.dispatchEvent(evt);
evt.initKeyEvent('keyup',true,true,window,false,false,false,false,27,0);
txtarea.dispatchEvent(evt);
evt.initKeyEvent('keypress',true,true,window,false,false,false,false,27,0);
txtarea.dispatchEvent(evt);
txtarea.setSelectionRange(ss,se);
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce
que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes
ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Bref, le DOM (Document Object Merdier) reste le DOM.
[...] Et voilà, on à scroller dans le textarea sans ScrollTop :D
http://mokhet.com/tests/setselectionrange.html
J'ai un peu changer ta solution :
var ss = txtarea.selectionStart; var se = txtarea.selectionEnd; var evt = document.createEvent('KeyEvents'); txtarea.setSelectionRange(ss,ss); evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keyup',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keypress',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); txtarea.setSelectionRange(ss,se);
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Bref, le DOM (Document Object Merdier) reste le DOM.
Laurent Vilday
var ss = txtarea.selectionStart; var se = txtarea.selectionEnd; var evt = document.createEvent('KeyEvents'); txtarea.setSelectionRange(ss,ss); evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keyup',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keypress',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); txtarea.setSelectionRange(ss,se);
Pourquoi dispatcher 3 events ici ?
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Pour Opéra je sais pas trop, j'arrive a rien trouver comme doc pour connaitre les compatibilités réelles.
Pour Netscape, de toute façon les navigateurs Netscape sont obsolètes dans TOUTES les versions. Oui, même ceux basés sur gecko. Netscape est mort, laissons le en paix.
Par contre, pour les gecko (firefox et consorts), le problème vient très certainement du 0 dans initKeyEvent('keypress', ...., 27, 0) Puisque tu veux transmettre la touche ESCAPE, c'est le keyCode 27 mais c'est le charCode null, pas 0. Parce que le charCode 0 il existe.
Donc, juste un initKeyEvent('keypress', ...., 27, null) et ça roule.
http://mokhet.com/tests/setselectionrange2.html avec 150300 caractères.
-- laurent
var ss = txtarea.selectionStart;
var se = txtarea.selectionEnd;
var evt = document.createEvent('KeyEvents');
txtarea.setSelectionRange(ss,ss);
evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0);
txtarea.dispatchEvent(evt);
evt.initKeyEvent('keyup',true,true,window,false,false,false,false,27,0);
txtarea.dispatchEvent(evt);
evt.initKeyEvent('keypress',true,true,window,false,false,false,false,27,0);
txtarea.dispatchEvent(evt);
txtarea.setSelectionRange(ss,se);
Pourquoi dispatcher 3 events ici ?
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce
que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes
ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Pour Opéra je sais pas trop, j'arrive a rien trouver comme doc pour
connaitre les compatibilités réelles.
Pour Netscape, de toute façon les navigateurs Netscape sont obsolètes
dans TOUTES les versions. Oui, même ceux basés sur gecko. Netscape est
mort, laissons le en paix.
Par contre, pour les gecko (firefox et consorts), le problème vient très
certainement du 0 dans initKeyEvent('keypress', ...., 27, 0)
Puisque tu veux transmettre la touche ESCAPE, c'est le keyCode 27 mais
c'est le charCode null, pas 0. Parce que le charCode 0 il existe.
Donc, juste un initKeyEvent('keypress', ...., 27, null) et ça roule.
http://mokhet.com/tests/setselectionrange2.html
avec 150300 caractères.
var ss = txtarea.selectionStart; var se = txtarea.selectionEnd; var evt = document.createEvent('KeyEvents'); txtarea.setSelectionRange(ss,ss); evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keyup',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); evt.initKeyEvent('keypress',true,true,window,false,false,false,false,27,0); txtarea.dispatchEvent(evt); txtarea.setSelectionRange(ss,se);
Pourquoi dispatcher 3 events ici ?
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Pour Opéra je sais pas trop, j'arrive a rien trouver comme doc pour connaitre les compatibilités réelles.
Pour Netscape, de toute façon les navigateurs Netscape sont obsolètes dans TOUTES les versions. Oui, même ceux basés sur gecko. Netscape est mort, laissons le en paix.
Par contre, pour les gecko (firefox et consorts), le problème vient très certainement du 0 dans initKeyEvent('keypress', ...., 27, 0) Puisque tu veux transmettre la touche ESCAPE, c'est le keyCode 27 mais c'est le charCode null, pas 0. Parce que le charCode 0 il existe.
Donc, juste un initKeyEvent('keypress', ...., 27, null) et ça roule.
http://mokhet.com/tests/setselectionrange2.html avec 150300 caractères.
-- laurent
Bipède
Laurent Vilday wrote:
var ss = txtarea.selectionStart; var se = txtarea.selectionEnd; var evt = document.createEvent('KeyEvents'); txtarea.setSelectionRange(ss,ss); evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0);
C'est une bonne question : Pas trouvé l'event qui à la bonne idée de déclencher le truc. Donc j'ai mis les 3 :) (dés fois que, tu vois, au bout de 3 events Mozilla se dise : "tiens ! si je rendais la selection visible !". Mais non).
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Pour Opéra je sais pas trop, j'arrive a rien trouver comme doc pour connaitre les compatibilités réelles.
Pareil.
Pour Netscape, de toute façon les navigateurs Netscape sont obsolètes dans TOUTES les versions. Oui, même ceux basés sur gecko. Netscape est mort, laissons le en paix.
Paix à son âme :)
Par contre, pour les gecko (firefox et consorts), le problème vient très certainement du 0 dans initKeyEvent('keypress', ...., 27, 0) Puisque tu veux transmettre la touche ESCAPE, c'est le keyCode 27 mais c'est le charCode null, pas 0. Parce que le charCode 0 il existe.
Possible en tout cas l'un et l'autre fonctionne sous Firefox, aucun des deux sur Mozilla (problème de version ? La mienne : 1.7.10). Chez toi ça fonctionne ?
Chose étrange si tu selectionnes quelque chose à la fin de ton document, que tu reviens au début avec la scrollbar et que tu appuies sur "esc" et bien c'est bon avec Mozilla.
Donc, juste un initKeyEvent('keypress', ...., 27, null) et ça roule.
Bof.
http://mokhet.com/tests/setselectionrange2.html avec 150300 caractères.
Beau ! Mais marche pas avec mon Mozilla :(
Tu es fort aussi avec CGM-IE (Cette Grosse Merde de Internet Explorer) ?
Laurent Vilday wrote:
var ss = txtarea.selectionStart;
var se = txtarea.selectionEnd;
var evt = document.createEvent('KeyEvents');
txtarea.setSelectionRange(ss,ss);
evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0);
C'est une bonne question : Pas trouvé l'event qui à la bonne idée de
déclencher le truc. Donc j'ai mis les 3 :) (dés fois que, tu vois, au
bout de 3 events Mozilla se dise : "tiens ! si je rendais la selection
visible !". Mais non).
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce
que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux
méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas
comprendre.
Pour Opéra je sais pas trop, j'arrive a rien trouver comme doc pour
connaitre les compatibilités réelles.
Pareil.
Pour Netscape, de toute façon les navigateurs Netscape sont obsolètes
dans TOUTES les versions. Oui, même ceux basés sur gecko. Netscape est
mort, laissons le en paix.
Paix à son âme :)
Par contre, pour les gecko (firefox et consorts), le problème vient très
certainement du 0 dans initKeyEvent('keypress', ...., 27, 0)
Puisque tu veux transmettre la touche ESCAPE, c'est le keyCode 27 mais
c'est le charCode null, pas 0. Parce que le charCode 0 il existe.
Possible en tout cas l'un et l'autre fonctionne sous Firefox, aucun des
deux sur Mozilla (problème de version ? La mienne : 1.7.10). Chez toi ça
fonctionne ?
Chose étrange si tu selectionnes quelque chose à la fin de ton document,
que tu reviens au début avec la scrollbar et que tu appuies sur "esc" et
bien c'est bon avec Mozilla.
Donc, juste un initKeyEvent('keypress', ...., 27, null) et ça roule.
Bof.
http://mokhet.com/tests/setselectionrange2.html
avec 150300 caractères.
Beau ! Mais marche pas avec mon Mozilla :(
Tu es fort aussi avec CGM-IE (Cette Grosse Merde de Internet Explorer) ?
var ss = txtarea.selectionStart; var se = txtarea.selectionEnd; var evt = document.createEvent('KeyEvents'); txtarea.setSelectionRange(ss,ss); evt.initKeyEvent('keydown',true,true,window,false,false,false,false,27,0);
C'est une bonne question : Pas trouvé l'event qui à la bonne idée de déclencher le truc. Donc j'ai mis les 3 :) (dés fois que, tu vois, au bout de 3 events Mozilla se dise : "tiens ! si je rendais la selection visible !". Mais non).
Ce qui permet de ne pas avoir à changer le contenu du textarea (parce que ça rame quand le texte et trés grand).
Mais ô surprise (dont je me serais bien passé) aucune des deux méthodes ne fonctionne sur Opéra, *Netscape* et *Mozilla* !! Vas comprendre.
Pour Opéra je sais pas trop, j'arrive a rien trouver comme doc pour connaitre les compatibilités réelles.
Pareil.
Pour Netscape, de toute façon les navigateurs Netscape sont obsolètes dans TOUTES les versions. Oui, même ceux basés sur gecko. Netscape est mort, laissons le en paix.
Paix à son âme :)
Par contre, pour les gecko (firefox et consorts), le problème vient très certainement du 0 dans initKeyEvent('keypress', ...., 27, 0) Puisque tu veux transmettre la touche ESCAPE, c'est le keyCode 27 mais c'est le charCode null, pas 0. Parce que le charCode 0 il existe.
Possible en tout cas l'un et l'autre fonctionne sous Firefox, aucun des deux sur Mozilla (problème de version ? La mienne : 1.7.10). Chez toi ça fonctionne ?
Chose étrange si tu selectionnes quelque chose à la fin de ton document, que tu reviens au début avec la scrollbar et que tu appuies sur "esc" et bien c'est bon avec Mozilla.
Donc, juste un initKeyEvent('keypress', ...., 27, null) et ça roule.
Bof.
http://mokhet.com/tests/setselectionrange2.html avec 150300 caractères.
Beau ! Mais marche pas avec mon Mozilla :(
Tu es fort aussi avec CGM-IE (Cette Grosse Merde de Internet Explorer) ?
Laurent Vilday
http://mokhet.com/tests/setselectionrange2.html avec 150300 caractères.
Beau ! Mais marche pas avec mon Mozilla :(
Grrr, c'est quoi ton Mozilla ? Ca donne quoi comme erreur dans la console ?
Ici ça passe sur Mozilla 1.7.3, Fx1.0.4, Fx1.5.0.4
-- laurent
http://mokhet.com/tests/setselectionrange2.html
avec 150300 caractères.
Beau ! Mais marche pas avec mon Mozilla :(
Grrr, c'est quoi ton Mozilla ? Ca donne quoi comme erreur dans la console ?
Ici ça passe sur Mozilla 1.7.3, Fx1.0.4, Fx1.5.0.4