Javascript getElementById未返回正确的值(可能是语法问题?)
我正在使用XSL编写这个页面,当我选中一个复选框时,它会将信息发送到我的javascript函数。这些都可以在IE中使用,但Chrome不能。问题是,在我点击复选框后,字段返回为“未定义”,如下所示Javascript getElementById未返回正确的值(可能是语法问题?),javascript,google-chrome,xslt,Javascript,Google Chrome,Xslt,我正在使用XSL编写这个页面,当我选中一个复选框时,它会将信息发送到我的javascript函数。这些都可以在IE中使用,但Chrome不能。问题是,在我点击复选框后,字段返回为“未定义”,如下所示 未定义 它最初是什么样子的 <div id="Part1" value="0-SER-MN">0-SER-MN</div> 0-SER-MN 我猜返回的值是“null”,但我不知道为什么?有人能帮忙吗?谢谢 <td colspan="2">
未定义
它最初是什么样子的
<div id="Part1" value="0-SER-MN">0-SER-MN</div>
0-SER-MN
我猜返回的值是“null”,但我不知道为什么?有人能帮忙吗?谢谢
<td colspan="2">
<div>
<xsl:attribute name="id">Part<xsl:value-of select="position()"/></xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="Part"/></xsl:attribute>
<xsl:if test="ErrorMessage">
<input type="hidden" name="partNumber">
<xsl:attribute name="value"><xsl:value-of select="Part"/></xsl:attribute>
</input>
<input type="hidden" name="TempKey">
<xsl:attribute name="value"><xsl:value-of select="TempKey"/></xsl:attribute>
</input>
</xsl:if>
<xsl:value-of select="./Part"></xsl:value-of>
</div>
</td>
部分
下面是通过复选框选择的javascript
function turnOnOrder(index, tempKey)
{
document.getElementById('Part' + index).innerHTML = '<input type="hidden" name="partNumber" value="' + document.getElementById('Part' + index).value + '"></input> <input type="hidden" name="TempKey" value="' + tempKey + '"/>' + document.getElementById('Part' + index).value;
document.getElementById('Location' + index).innerHTML = '<input type="hidden" name="location" value="' + document.getElementById('Location' + index).value + '"></input> ' + document.getElementById('Location' + index).value;
document.getElementById('Site' + index).innerHTML = '<input type="hidden" name="siteCode" value="' + document.getElementById('Site' + index).value + '"></input> ' + document.getElementById('Site' + index).value;
document.getElementById('PONumber' + index).innerHTML = '<input type="hidden" name="origPO" value="' + document.getElementById('PONumber' + index).value + '"></input><input size="20" maxlength="20" type="text" name="PONumber" value="' + document.getElementById('PONumber' + index).value + '"></input>';
document.getElementById('Quantity' + index).innerHTML = '<input type="hidden" name="OrderQty" value="' + document.getElementById('Quantity' + index).value + '"></input> ' + document.getElementById('Quantity' + index).value;
if(document.getElementById('viewPrice') == null)
document.getElementById('Price' + index).innerHTML = '<input type="hidden" name="Price" value="' + document.getElementById('Price' + index).value + '"></input> ';
else
document.getElementById('Price' + index).innerHTML = '<input type="hidden" name="Price" value="' + document.getElementById('Price' + index).value + '"></input> ' + document.getElementById('Price' + index).value;
document.getElementById('UserId' + index).innerHTML = '<input type="hidden" name="UserId" value="' + document.getElementById('UserId' + index).value + '"></input> ';
//document.getElementById('InactiveOverride' + index).innerHTML = '<input type="hidden" name="InactiveOverride" value="' + document.getElementById('InactiveOverride' + index).value + '"/>';
//document.getElementById('MpqMoqOverride' + index).innerHTML = '<input type="hidden" name="MpqMoqOverride" value="' + document.getElementById('MpqMoqOverride' + index).value + '"/>';
document.getElementById('Other' + index).innerHTML = '<input type="hidden" name="Supplier" value="' + document.getElementById('Supplier' + index).value + '"></input><input type="hidden" name="ICST" value="' + document.getElementById('ICST' + index).value + '"></input><input type="hidden" name="backflush" value="' + document.getElementById('backflush' + index).value + '"></input><input type="hidden" name="Billing" value="' + document.getElementById('Billing' + index).value + '"></input><input type="hidden" name="InactiveOverride" value="' + document.getElementById('InactiveOverride' + index).value + '"/><input type="hidden" name="MpqMoqOverride" value="' + document.getElementById('MpqMoqOverride' + index).value + '"/>';
}
函数转换顺序(索引、临时键)
{
document.getElementById('Part'+索引).innerHTML=''+document.getElementById('Part'+索引).value;
document.getElementById('Location'+index.).innerHTML=''+document.getElementById('Location'+index.).value;
document.getElementById('Site'+索引).innerHTML=''+document.getElementById('Site'+索引).value;
document.getElementById('PONumber'+索引).innerHTML='';
document.getElementById('Quantity'+index.).innerHTML=''+document.getElementById('Quantity'+index.).value;
if(document.getElementById('viewPrice')==null)
document.getElementById('Price'+index.).innerHTML='';
其他的
document.getElementById('Price'+index.).innerHTML=''+document.getElementById('Price'+index.).value;
document.getElementById('UserId'+索引).innerHTML='';
//getElementById('InactiveOverride'+index).innerHTML='';
//document.getElementById('MpqMoqOverride'+索引).innerHTML='';
document.getElementById('Other'+索引).innerHTML='';
}
这似乎是一个javascript DOM访问问题。并且与xslt无关
问题在于DOM属性和html属性之间的差异以及浏览器中的不同处理方式。
在大多数情况下,使用DOM属性(DOM elment.attribute name)应该可以工作。因为浏览器将html属性同步到DOM属性。但对于客户属性(例如,您在div的值属性),这不会发生(在Chrome等中)
因此,您应该使用
document.getElementById('Part' + index).getAttribute('value')
替换document.getElementById('Part'+index).value
这应该适用于所有合理的现代浏览器(例如IE>6),但这很奇怪,我不确定我是否理解。我以前在另一页上写过一篇文章,只是与我们刚才做的相反。这有什么原因吗?谢谢你回答我的问题,你肯定帮了我。如果我没记错的话,上次它读取的是输入字段的更改值。这将在DOM属性“elm.value”中。getElementById将读取html属性的初始值,并且不会更改。
document.getElementById('Part' + index).getAttribute('value')