2008-12-05 80 views
1

好,我需要改變在GridView的隱藏字段的值,這裏是我到目前爲止有:如何使用Javascript在Gridview中更改隱藏字段的值?

for(var i = 0; i < gv_Proofs.rows.length; i++) 
{ 
    var tbl_Cell = gv_Proofs.rows[i].cells[0]; 
    var sdiFound = false; 

    for(var x = 0; x < tbl_Cell.childNodes.length; x++) 
    { 
     if(tbl_Cell.childNodes[x].id == "_ctl0_MasterContentPlaceHolder_gv_Proofs__ctl2_lbl_SDI") 
     { 
      if(tbl_Cell.childNodes[x].innerHTML == sdi) 
       sdiFound = true; 
     } 
     if(tbl_Cell.childNodes[x].id == "_ctl0_MasterContentPlaceHolder_gv_Proofs__ctl2_lbl_Updated" && sdiFound) 
      tbl_Cell.childNodes[x].value = "true"; 
    } 
} 

誰能告訴我什麼,我做錯了什麼?謝謝!

回答

1

我明白了。上面的循環是正確的,但顯然我的sdi值並不總是正確的,因此我檢查的值總是設置爲false。因此,如果有人再次遇到這個問題,上述工作就完美了。

0

編輯:檢查之前的經典案例檢查。 Apparently設置hidden = true實際上可以防止數據綁定,這就是JS出現問題的原因。 會說這是ASP.NET的典型問題之一,它使我詛咒它的名字,但可能只是選擇適應控制與衆多的谷歌解決方案之一。

有關在ASP.NET中使用元素ID的說明完好無損,因爲它是邪惡的。


很難知道沒有更多的代碼(如果是這樣執行的到底是什麼?是別的東西覆蓋它?是什麼標記是什麼樣子?),但我現在通過它引用元素的ASP.NET可以說變形的ID是一個壞主意(TM)。

如果你可以,我建議你試着在codebehind中爲你處理引用的地方修改它,或者至少在那裏寫出你可以使用clientID的JS。否則,我會嘗試通過擴展元素獵手來尋找元素 - 您自己或像jquery等人的「$」函數那樣的庫實用程序 - 這將允許您使用強大的CSS或Xpath參數。

0

如果childNode id是(截斷)lbl_SDI,那麼您的第一條語句只有true。 如果第一條語句爲真(通過sdiFound)並且ID是(截斷)lbl_Updated,那麼您的第二條語句僅爲真。

因此,沒有辦法讓第二個陳述成爲現實。只有當節點ID 不是 lbl_Updated時,變量sdiFound纔會爲真。

我想很多人可能不同意你引用.NET ID。您是否考慮過使用:

<%= lbl_SDI.ClientID %> 

在您的JavaScript嗎?

0

好吧,你能告訴發生了什麼?似乎忘記將sdiFound變量重置爲false,或者在找到它時中斷循環。

至於你的問題:

如果運行隱藏的HTML輸入作爲服務器控件,然後將它通過在GridView顯示,因此將會有一個唯一的ID。你可以通過使用getElementById來找到它。你可以把它放在一個循環中,爲你建立正確的id,你應該能夠找到你的控制。

相關問題