Заполнение текстовых областей с помощью JavaScript - PullRequest
0 голосов
/ 09 декабря 2011

Это расширение предыдущего вопроса , который я задал.Я столкнулся с некоторыми дополнительными проблемами.

Я загружаю форму с динамическими текстовыми полями.Не спрашивайте почему, но мне нужно заполнить эти поля с помощью JavaScript (должен иметь дело с AJAX и т. Д.).Для упрощения скажем, что моя текстовая область имеет имя «myTextarea», и я хочу заполнить ее параметром запроса «myRequestParam».Поэтому я хотел бы сделать что-то вроде:

updateTextareaText("myTextarea", "${myRequestParameter}");

Из моего предыдущего вопроса я обнаружил, что это решает некоторые проблемы:

updateTextareaText("myTextarea", unescape('<c:out value="${myRequestParam}" />'));

Я пробовал несколько различныхреализации для updateTextareaText, но, похоже, ничего не работает.Мне нужно обрабатывать как новые строки, так и специальные символы.

Попробуйте # 1

function updateTextareaText(textareaElementName, newText) {
    var textareaBox = document.getElementsByName(textareaElementName)[0];
    textareaBox.innerHTML = newText;
}

Попробуйте # 2

function updateTextareaText(textareaElementName, newText) {
    var textareaBox = document.getElementsByName(textareaElementName)[0];
    textareaBox.value = newText;
}

Попробуйте # 3

function updateTextareaText(textareaElementName, newText) {
    var textareaBox = document.getElementsByName(textareaElementName)[0];

    var existingNodes = textareaBox.childNodes;
    if (existingNodes.length > 0) {
        textareaBox.removeChild(existingNodes[0]);
    }

    var newTextNode = document.createTextNode(newText);
    textareaBox.appendChild(newTextNode);
}

Все вышеперечисленное лишено перевода строки и / или отображает некоторые специальные символы в качестве экранированных значений.Я использовал следующее значение myRequestParam для тестирования:

Test

Newline and Special `~!@#$%^&*()_+-={}|[]\:";'<>?,./

Кто-нибудь знает правильный способ обработки всех различных случаев?В качестве примечания, значения myRequestParam заполняются из БД и возвращают новые строки как \r\n, которые я экранировал как %0A, но я не уверен, что это то, что я должен делать.Изначально JavaScript не обрабатывал \r\n (он жаловался бы на неопределенные строки и т. Д.).

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

См. другой вопрос , который я отправил. Хитрость заключалась в том, чтобы убрать выход из задней стороны и всего материала escape и <c:out> и вместо этого использовать функцию EL, которая использует StringEscapeUtils.escapeJavaScript.

0 голосов
/ 11 декабря 2011

При локальной и локальной попытке это сработало у меня с вашей функцией # 2 (пробовала только эту).

заголовок: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

javascript: updateTextareaText ("txtarea", "Test \ n \ nNewline и Special` \ ~! @ # $% \ ^ \ & * () _ + - = {} | [] \: \ "; '< ?.>, // \ näöüÄÖÜß ");

Таким образом, получаемая строка, вероятно, не экранирована (\ ', \ & и т. Д.), И в этом случае помогает Apache StringEscapeUtils в Commons Langs (http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringEscapeUtils.html#escapeJavaScript%28java.lang.String%29).

Кроме этого, вам пришлось бы выполнить преобразование для этого случая javascript, заменив 'with \' и так далее ... не очень.

0 голосов
/ 09 декабря 2011

Попробуйте jQuery:

$('#textAreaId').val('MyValue');

или

$('#textAreaId').html('MyValue');

Угадайте, это бы сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...