2014-08-28 73 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