Angelz
Threadersteller
Dabei seit: 09.11.2005
Ort: Chemnitz
Alter: 44
Geschlecht:
|
Verfasst Sa 12.05.2007 09:30
Titel JS-Problem oder Normalität? |
|
|
Hi allesamt!
Mal sehn, ob man mir hier helfen kann ^^
Auf meiner privaten Seite hab ich bei den Kommentaren die Möglichkeit eingebaut, Smileys einzufügen. Das klappt auch ganz gut.
Problem: Wenn jemand viel Text schreibt und dann einen Smiley einfügt, wird der zwar an die Position des Cursors gesetzt, aber trotzdem wird der Fokus oder wie man dazu sagt wieder an den Anfang des Textfeldes gesetzt, sprich: egal ob der Smiley oben oder unten im Text eingefügt wird, man sieht nach dem Einfügen immer den oberen Teil des Textes (der Cursor ist aber weiterhin an der Einfügemarke).
Ist das "normal" oder kann man das irgendwie umgehen? Ist ja lästig, nach dem einfügen eines Smileys immer wieder ans Ende des Textes scrollen zu müssen.
Hier der JS-Code:
Code: | var input = document.forms[fName].elements[eName];
input.focus();
/* für Internet Explorer */
if(typeof document.selection != 'undefined') {
/* Einfügen des Formatierungscodes */
var range = document.selection.createRange();
var insText = range.text;
range.text = aTag + insText + eTag;
/* Anpassen der Cursorposition */
range = document.selection.createRange();
if (insText.length == 0) {
range.move('character', -eTag.length);
} else {
range.moveStart('character', aTag.length + insText.length + eTag.length);
}
range.select();
}
/* für neuere auf Gecko basierende Browser */
else if(typeof input.selectionStart != 'undefined')
{
/* Einfügen des Formatierungscodes */
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
/* Anpassen der Cursorposition */
var pos;
if (insText.length == 0) {
pos = start + aTag.length;
} else {
pos = start + aTag.length + insText.length + eTag.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
/* für die übrigen Browser */
else
{
/* Abfrage der Einfügeposition */
var pos;
var re = new RegExp('^[0-9]{0,3}$');
while(!re.test(pos)) {
pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
}
if(pos > input.value.length) {
pos = input.value.length;
}
/* Einfügen des Formatierungscodes */
var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
} |
Vielen Dank schonmal!
PS: Hab gerade gemerkt, dass es beim Posten hier genauso ist. Also kann man das möglicherweise doch nichts machen?[/code]
|
|