2013-04-16 4 views
0

В одной функции javascript я создаю текстовое поле, основанное на некоторых данных JSON, которые я захватываю с другого сайта. Я создаю текстовое поле здесь:Как получить доступ к значению textarea с помощью javascript?

if(type == 'fill-in'){ 
    var textField = $('<center><div id="response-text"><textarea id="test" name="test" rows="10" cols="80">Answer here</textarea></div></center>').appendTo(panel.root);       
} 

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

document.getElementById("test").value 

Но это дает мне ошибку, и если я использую

document.getElementByName("test").value 

Это говорит мне о том, что значение не определено. Не позволяют ли текстовые области автоматически устанавливать свои значения во все, что вы на них набираете? Есть ли лучший способ захватить то, что вводится в текстовое поле?

EDIT:

getElementById работает теперь ... не уверен, что я делал раньше, но я должен попробовал его 3-4 раза. Прошу прощения за бессмысленный вопрос.

+0

Поскольку вы уже используете JQuery, почему бы вам не использовать $ ("# тест"). Val() –

+0

Пожалуйста, покажите ваш HTML или еще лучше, создать jsfiddle. –

+0

Что дает 'alert (typeof document.getElementById (" test "));'? – plalx

ответ

1

Вот мой лучший Угадай Что происходит в вашем коде и почему вы можете напортачиться на variable hoisting.

Я предполагаю, что вы пытаетесь динамически добавить свою текстовую область, а затем сразу же получите ссылку, используя var test = document.getElementById("test");. Из-за variable hoisting объявленные переменные подняты в верхнюю часть текущей области. Это приведет к тому, что объявление начнется до, добавляется текстовая область.

Как неясно, где проблема с OP, я заметил, что вы неправильно используете getElementsByName.

getElementByName должно быть getElementsByName. Тонкая, но значительная разница. Поскольку имена не обязательно должны быть уникальными, функция собирает список узлов всех элементов DOM с заданным атрибутом name.

getElementById с другой стороны возвращает ссылку на сам элемент.

getElementsByName:

Возвращает список элементов с заданным именем в HTML-документе.

getElementById:

Возвращает ссылку на элемент по его ID.

+1

Это не объясняет, почему он также получает ошибку, когда использует 'getElementById'. – Barmar

+1

Да, я был в процессе обновления и мышления в то время - но так как я впервые заметил проблему с 'getElementsByName', я хотел бы остановиться и указать на это. – Chase

1

Использование getElementById работает нормально. У вас должно быть что-то не так с вашей разметкой HTML - возможно, еще один элемент с idtest.

Working fiddle:

1

Я предполагаю, что Teaxarea элемент успешно загружен и присутствует в DOM.В этом случае ваш javascript загружается &, исполняемый еще до того, как элемент Textarea загружен & готов в DOM.

С уважением,

Смежные вопросы