2013-03-22 186 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

相關問題