2013-05-02 66 views
0

我正在使用XSL寫這個頁面,當我點擊一個複選框時,它將信息發送到我的javascript函數。這一切都在IE中起作用,但Chrome並沒有。問題是,我打後的複選框,外地回來爲「未定義」像這樣getElementById沒有返回正確的值(可能是語法問題?)

<div id="Part1" value="0-SER-MN">undefined</div> 

凡最初是像

<div id="Part1" value="0-SER-MN">0-SER-MN</div> 

我的猜測是,返回的值是「空「,但我不知道爲什麼?誰能幫忙?謝謝。

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

所以這裏是與複選框

 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 + '"/>'; 
} 

回答

1

這似乎是一個JavaScript的DOM訪問問題選擇的JavaScript。與xslt無關。

的問題是基於DOM屬性HTML屬性並在瀏覽器中不同的處理之間的差異。 在大多數情況下,使用DOM屬性(dom-elment.attribute-name)應該可以工作。因爲瀏覽器將html屬性同步到DOM屬性。但是,這不會發生(在Chrome等)的客戶屬性(例如您的div值屬性)。

因此,你應該使用

document.getElementById('Part' + index).getAttribute('value') 

更換爲document.getElementById('Part' + index).value

這應在所有合理的現代瀏覽器的工作(如IE> 6)

+0

這工作,但它的奇,不知道我明白它。我在另一頁上有一個[類似的問題](http://stackoverflow.com/questions/16148571/xsl-not-rendering-acting-properly-in-chrome),除了它與我們剛剛做的相反。這是爲什麼?感謝您回答我的問題,您肯定有幫助。 – 2013-05-03 13:57:35

+0

如果我上次正確記得它正在讀取輸入字段的更改值。這將在DOM屬性「elm.value」中。 getElementById比讀取html屬性的初始值並且不會被改變。 – 2013-05-03 14:58:40