Hallo Leute
Ich hoffe es hat hier jemand der mir bei meinem Problem mit Javascript helfen kann
Aaaalso... ich entwickle gerade einen kleinen visuellen Editor zum einfügen von BBCodes in eine TextArea. Dazu verwende ich folgenden code:
Mein Problem ist nun, dass textMiddle immer einen falschen Wert hat. selection.start und selection.end sind immer korrekt gesetzt, also muss es irgendwie an der Funktion substr() liegen. Habe schon min 1h damt verbracht den Fehler zu suchen, bin am verzweifeln...
.
EDIT (autom. Beitragszusammenführung) :
RononDex schrieb nach 10 Stunden, 7 Minuten und 28 Sekunden:
Hat sich erledigt, habe den Fehler gefunden...
Der fehler lag (wie schon vermutet) an folgender Stelle:
Und zwar ist es so, dass Javascript in der Funktion substr() (entgegen dem standard anderer Programmiersprachen) als 2. Parameter nicht die Endposition, sondern die Länge erwartet...
Also musste ich die Zeile wie folgt ändern:
Ich hoffe es hat hier jemand der mir bei meinem Problem mit Javascript helfen kann
Aaaalso... ich entwickle gerade einen kleinen visuellen Editor zum einfügen von BBCodes in eine TextArea. Dazu verwende ich folgenden code:
Code:
function insertBBCode(strInputControlId, strBBCodeType) { var inputControl = document.getElementById(strInputControlId); var startTag = "[" + strBBCodeType + "]"; var endTag = "[/" + strBBCodeType + "]"; var selection = getTextAreaSelection(inputControl); var text = inputControl.value; var textStart = text.substr(0, selection.start); var textEnd = text.substr(selection.end, text.length); var textMiddle = text.substr(selection.start, selection.end); inputControl.value = textStart + startTag + textMiddle + endTag + textEnd; } function getTextAreaSelection(el) { var start = 0, end = 0, normalizedValue, range, textInputRange, len, endRange; if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { start = el.selectionStart; end = el.selectionEnd; } else { range = document.selection.createRange(); if (range && range.parentElement() == el) { len = el.value.length; normalizedValue = el.value.replace(/\r\n/g, "\n"); // Create a working TextRange that lives only in the input textInputRange = el.createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); // Check if the start and end of the selection are at the very end // of the input, since moveStart/moveEnd doesn't return what we want // in those cases endRange = el.createTextRange(); endRange.collapse(false); if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { start = end = len; } else { start = -textInputRange.moveStart("character", -len); start += normalizedValue.slice(0, start).split("\n").length - 1; if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { end = len; } else { end = -textInputRange.moveEnd("character", -len); end += normalizedValue.slice(0, end).split("\n").length - 1; } } } } return { start: start, end: end }; }
.
EDIT (autom. Beitragszusammenführung) :
RononDex schrieb nach 10 Stunden, 7 Minuten und 28 Sekunden:
Hat sich erledigt, habe den Fehler gefunden...
Der fehler lag (wie schon vermutet) an folgender Stelle:
Code:
var textMiddle = text.substr(selection.start, selection.end);
Also musste ich die Zeile wie folgt ändern:
Code:
var textMiddle = text.substr(selection.start, (selection.end - selection.start));
Kommentar