0

在一个 javascript 函数中,我正在根据从另一个站点获取的一些 JSON 数据创建一个文本区域。我在这里创建文本区域:

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

它告诉我该值未定义。文本区域不会自动将其值设置为您在其中键入的任何内容吗?有没有更好的方法来获取正在输入到 textarea 中的内容?

编辑:

getElementById 现在正在工作......不确定我之前在做什么,但我必须尝试过 3-4 次。我为这个毫无意义的问题道歉。

4

3 回答 3

1

这是我对代码中实际发生的事情以及为什么你可能会被变量提升搞砸的最佳猜测

我想您正在尝试动态添加您的文本区域,然后使用var test = document.getElementById("test");. 由于变量提升,声明的变量被提升到当前作用域的顶部。这将导致在添加文本区域之前发生声明。

由于不清楚 OP 的问题出在哪里,我确实注意到您使用getElementsByName不正确。

getElementByName应该是getElementsByName。一个微妙但显着的差异。由于名称不需要唯一,因此该函数收集具有给定name属性的所有 DOM 元素的节点列表。

getElementById另一方面返回对元素本身的引用。

getElementsByName

返回 HTML 文档中具有给定名称的元素列表。

getElementById

通过其 ID 返回对元素的引用。

于 2013-04-16T01:32:12.917 回答
1

使用getElementById效果很好。您的 HTML 标记一定有问题 - 可能是另一个带有idof 的元素test

工作小提琴:

于 2013-04-16T01:34:43.857 回答
1

我假设 Teaxarea 元素已成功加载并存在于 DOM 中。在这种情况下,您的 javascript 甚至在 Textarea 元素在 DOM 中加载和准备好之前就正在加载和执行。

问候,

于 2013-04-16T01:41:45.960 回答