2014-08-28 108 views
0

我使用下面的代碼。document.getElementById沒有得到新輸入的HTML文本輸入值

這個想法是打印名爲「PrintThis」的div的內容,其中包含文本輸入區「textarea1」。

問題是,getElementById只能返回加載頁面的字符串;在這種情況下「蛋糕」。

如果我通過點擊並在頁面上輸入「textarea1」將「cake」更改爲「pie」,那麼printContents仍然有「cake」而不是「pie」。

<html> 
<head> </head> 
<script type="text/javascript"> 

function printFunction(divName) { 
var printContents = document.getElementById(divName).innerHTML; 
//Now call a script to print (not included) 
} 
</script> 
<body> 
    <div id="printThis" name="printThis"> 
    <textarea id="textarea1" cols="1" rows="10" style="width:95%!important;" ">cake</textarea> 
    </div> 

    <input type="button" value="Print Div" onClick="printFunction('printThis')"> 
</body></html> 

在我的生產版本我也使用AJAX來發布文字面積值回服務器,所以在理論上可以使用頁面刷新,但不跑,我嘗試使用這些選項。

document.location.reload(true); 
window.top.location=window.top.location; 

生產版本也有jQuery可用。

+0

試圖讓與jQuery VAL()函數... – Shail 2014-08-28 10:53:48

+0

http://stackoverflow.com/q/14939010/1700321值。 – 2014-08-28 11:04:53

+0

好的,我會看看jQuery選項,但記住在生產版本中,printThis Div會有多個元素。 – 2014-08-28 11:25:47

回答

1

首先,您正在嘗試獲取div的innerHTML,而不是實際的textarea。其次,不是試圖讓innerHTML嘗試使用值。

http://jsfiddle.net/qdymvjz8/

<div id="printThis" name="printThis"> 
    <textarea id="textarea1" cols="1" rows="10">cake</textarea> 
    </div> 
<input type="button" value="PrintDiv" onClick="printFunction('textarea1')"> 

function printFunction(divName) { 
var printContents = document.getElementById(divName).value; 
} 
+0

請參閱我的評論user1371641如果問題不明確,再次感到遺憾。 – 2014-08-28 11:27:51

+0

在訪問div的innerHTML之前,您可以先獲取其子元素的值,並在獲取div的值之前更新其innerHTML。我已經更新了小提琴,請檢查一下。 'function printFunction(divName){ textArea = document.getElementById(「textarea1」); textArea.innerHTML = textArea.value; var printContents = document.getElementById(divName).innerHTML; alert(printContents); }' – khizerbajwa 2014-08-29 04:48:41

0

如果你在你的DIV多個項目在生產中,那麼你可以通過div的兒童進行迭代,並拖出值。

function printFunction(divName) { 
    var printContents = document.getElementById(divName), 
    childItemCount = 0, 
    stringToPrint = ''; 

for (childItemCount; childItemCount < printContents.children.length; childItemCount++) { 
    stringToPrint += printContents.children[childItemCount].value; 
} 

console.log(stringToPrint); 
//Now call a script to print (not included) 
} 
+0

我正試圖訪問生產版本中的整個'printThis'DIV。問題中給出的例子被簡化了。對不起,如果這不明確,並感謝您的答案。 – 2014-08-28 11:26:38

+0

你當然可以使用innerHTML來表示DOM元素,它不會在value屬性(label,span ...)上反映任何東西。 – David 2014-08-28 12:11:00