2009-07-15 38 views
0

有人可以向我解釋爲什麼我不能在函數中使用document.getElementById('id')。value?在JS函數中返回值

我試圖做一個簡單的乘法腳本(IM學習JS,它實際上是一種樂趣啦!),並迅速實現價值有多討厭打字是整個代碼行只是爲了回報,所以我寫了一個小功能:

<script type="text/javascript"> 
function value(elementid){ 
return document.getElementById(elementid).value 
} 
</script> 

但是,這不起作用,並會簡單地破壞我的整個腳本的功能。我只想輸入value('id')來返回元素的值。

爲了解決這個問題,一位朋友建議我在函數中取出.value,並將其添加到每一行的末尾,我將其稱爲value('id').value。

爲什麼我的第一種方式沒有工作?

感謝您的幫助!

+0

我認爲最好的,如果你粘貼整個腳本 – 2009-08-12 15:21:37

回答

5

更改你的函數名稱爲'getValue'。 此代碼的工作在我的機器上:P

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<script type="text/javascript"> 
    function getvalue(id) {return document.getElementById(id).value;} 
</script> 
</head> 
<body> 
    <input type="text" id="Text1" /> 
    <input type="button" onclick="alert(getvalue('Text1'))" /> <br /> 

    <input type="text" id="Text2" /> 
    <input type="button" onclick="alert(getvalue('Text2'))" /> <br /> 

    <input type="text" id="Text3" /> 
    <input type="button" onclick="alert(getvalue('Text3'))" /> <br /> 

</body> 
</html> 
0

你在做什麼應該工作。什麼叫這個?當您調用它時,您的元素可能不在DOM中。即在實際元素之前在內聯腳本中調用它。

+0

基本上什麼在呼喚它,但沒有任何實際工作。我的腳本應該是頭腦還是別的? – Cyclone 2009-07-15 01:04:53

+0

該腳本出現在所有html之前,位於主體內部。 – Cyclone 2009-07-15 01:05:26

+0

你能舉出一個特定的例子作爲它被調用的HTML代碼片段嗎?正如其他人所說的,它可能與在通話時尚未設置DOM有關。 – JohnFx 2009-07-15 01:35:43

2

你確定你得到的元素有一個值屬性,而不是其他類似.text或...?

如果它是一個INPUT標籤,你可以使用.value和其他一些HTML控件元素,但對於常規的DIV,SPAN等等我不認爲它們暴露了.value屬性。檢查標記文檔以查看它們是否支持.value。

+0

這是專門爲輸入字段,所以idk爲什麼沒有工作。 – Cyclone 2009-07-15 01:17:54

+0

我唯一能想到的就是遵循俄羅斯的建議。確保在創建元素之前不要調用JavaScript。您是否至少在文檔/正文onload事件中包裝了該呼叫? – 2009-07-15 02:06:45

1

我相信russau是在正確的軌道上。您可以通過將<腳本塊>塊移動到頁面末尾來進行測試,因爲希望除非您有複雜的頁面結構,否則所有內容都會按該點加載。

1

並非每個DOM元素都有一個名爲value的屬性,這可能是腳本破壞的原因。您可以嘗試以下操作:

<script type="text/javascript"> 
    function value(elementid){ 
     var el = document.getElementById(elementid); 
     return el.value || el; 
    } 
</script> 

這將返回el.value,如果它存在或者它不只是元素。這不是最優雅的解決方案,但它可能會阻止你的其他腳本的破壞。不知道你在調用該功能的上下文,我忍不住

-1

變化從「價值」的功能,到別的名字

+0

爲什麼要重複接受的答案是什麼? – madth3 2013-01-08 18:44:32