2008-12-05 71 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,你应该能够找到你的控制。

相关问题