Не удается заставить document.getElementById.getElementsByTagName работать правильно - PullRequest
0 голосов
/ 06 августа 2010
function confirm_results(theform) {

var inputsX = document.getElementById(theform).getElementsByTagName('textarea');
          for(var iX = 0, nX = inputsX.length - 1; iX < nX; iX++)
          {
            text += inputs[iX].innerHTML + ', ';
          }
return text;
}

Может кто-нибудь сказать мне, почему это не работает? Я пытаюсь найти все текстовые области внутри DIV, через которые я передаю имя, и вернуть текст. По какой-то причине он просто ничего не делает.

1 Ответ

1 голос
/ 06 августа 2010

innerHTML - неправильный способ прочитать значение текстовой области.

Частично потому, что любые символы < или & в нем будут экранированы HTML, но в основном потому, что содержимое текстового узла внутри узла HTMLTextAreaElement не указывает на текущее значение текстовой области.

Фактически текстовое содержимое узла является исходным содержимым текстовой области, как видно из исходного кода HTML. Это то же самое, что и свойство defaultValue. Он не обновляется, когда вы вводите текстовую область ... за исключением IE, который, как обычно, все ошибается.

Вы, вероятно, хотите использовать inputs[iX].value вместо.

То же самое относится и к обычным вводам, где input.value представляет текущее значение, но input.getAttribute('value') совпадает с input.defaultValue, представляя исходное значение, введенное в атрибут value="..." в источнике HTML. Опять же: кроме IE в связи с большим количеством ошибок.

То же самое относится и к свойствам checked и selected флажков и опций выбора: атрибуты checked и selected являются исходными значениями, отраженными в defaultChecked и defaultSelected свойства .

Кроме того, с length-1 вы игнорируете последнюю текстовую область в списке. Вы действительно хотите это сделать?

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