2013-03-22 187 views
0

我有一个窗体,其ID为相应输入框的名称,标题和说明。 但是,当我尝试在HTML中显示这些值时,我会收到“[object HTMLInputElement]”或“undefined”。窗体输入文本显示为“未定义”或“[object HTMLInputElement]”

我得到的以下代码块,我已经声明的变量名称,标题和描述全球职能以外的检索输入值“未定义”

var name; 
var title; 
var description;  
document.getElementById("name").onchange = function(){ 
     name = document.getElementById("name").value; 
     }; 
document.getElementById("title").onchange = function(){ 
      title = document.getElementById("title").value; 
     }; 
document.getElementById("description").onchange = functio){ 
      description = document.getElementById("description").value; 
     }; 

var myhtml = '<p>' + name + '</p><p>' + title + '</p><p>' + description + '</p><p>'; 

不过,我得到[对象HTMLInputElement]如果我代替声明函数中的变量(而不是 “全局”?),像这样:

document.getElementById("name").onchange = function(){ 
     var name = document.getElementById("name").value; 
     }; 

MYHTML是变量,其打印在DOM中。

这是怎么回事?如果我将它们全局声明,我已经尝试将名称,标题和描述传递给函数。但是这并没有解决问题(我仍然有“[object HTMLInputElement]”)。

+0

'undefined',因为变量不是在运行时(你设置事件侦听器里面的值,这显然有没有被触发时'定义MYHTML '被宣布)。 '[object HTMLInputElement]',因为具有ID属性的元素可以作为window [“id_of_element”]'访问,前提是不存在名为'id_of_element'的全局变量。 – 2013-03-22 23:43:56

+1

myhtml如何在DOM中“打印”?您已经定义了onchange事件,所以除了处理程序之外,这些值不会显示。 – 2013-03-22 23:59:10

+0

感谢评论家伙。现在我正在修改函数分解,范围和运行时间,正如@RobW的评论暗示给我的。上面这段代码是双重嵌套的“click”函数的一部分,它们在两个dom/window初始函数中。所以事情可能变得混乱。 – LazerSharks 2013-03-23 00:10:41

回答

2

“未定义”值是由于“onchange”事件在输入发生变化之前未被触发。这jsfiddle说明了我的观点:http://jsfiddle.net/gR8td/。请注意,在为输入元素键入值之后,会显示全局变量的新值。我增加了以下功能输出值:

function showInputs() { 
    var myhtml = '<p>' + name + '</p><p>' + title + '</p><p>' + description + '</p>'; 
    var elem=document.getElementById('output'); 
    elem.innerHTML = myhtml; 
} 
+0

是的,你暗示这是由于“onchange”事件发射太早;在我的情况下,这是由于它们的函数,这些函数为名称,标题和描述变量赋值,这些变量位于可能在DOM和表单加载之前启动的函数中。我将代码块移到了传统的$(document).ready()函数中,以确保首先加载表单。 感谢伟大的jsFiddle。 – LazerSharks 2013-03-25 00:51:41

相关问题