Javascript getElementById未返回正确的值(可能是语法问题?)

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">

我正在使用XSL编写这个页面,当我选中一个复选框时,它会将信息发送到我的javascript函数。这些都可以在IE中使用,但Chrome不能。问题是,在我点击复选框后,字段返回为“未定义”,如下所示

未定义
它最初是什么样子的

<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')