日期:2014-05-18  浏览次数:20570 次

javascript 取不到绑定后控件的ID?大家帮忙看看,解决后马上给分,在线等
这段是Javascript脚本一起贴出来:
<script language="javascript" type="text/javascript">  
  function Add(objA,objB)
  {
  var tem=new Array();
  with(objA)
  for(i=length-1;i>=0;i--)
  if(options[i].selected){tem[tem.length]=new Option(options[i].text,options[i].value);}
   
  if(objA.selectedIndex>-1)
  {
  for(i=0;i<objB.length;i++) tem[tem.length]=objB.options[i];
  with(objB)
  {
  length=0;
  tem.sort(sortArr);
  for(i=0;i<tem.length;i++) options[length]=new Option(tem[i].text,tem[i].value)
  }
  }  
  }
</script>


这段是DataList绑定代码:
<asp:DataList ID="DataList1" runat="server" Width="100%" OnItemCommand="DataList1_ItemCommand" OnItemDataBound="DataList1_ItemDataBound">
<ItemTemplate>
  <tr>
    <td valign="top" align="left">
  <asp:ListBox ID="ListBox1" runat="server" Height="180px" Width="88px"></asp:ListBox>
    </td>
   <td style="width: 100px; text-align: center;">
   <span style="font-size: 9pt"><a href="#" onclick="Add(document.getElementById('ListBox1'),document.getElementById('ListBox2'))">添加>></a></span>   
   </td>
   <td valign="top" align="left">
  <asp:ListBox ID="ListBox2" runat="server" Height="180px" Width="88px"></asp:ListBox>
   </td>
 </tr>
</ItemTemplate>
这段代码的作用是,当我点击添加链接的时候把ListBox1的值赋给ListBox2.
当然,在这段代码没有绑定在DataList上的时候是正常的。绑定后document.getElementById('ListBox1')取出来为NULL
(红色部分javascrpt的Add方法调用的时候取不到值,值为NULL)。在查看运行出来的源代码的时候,得知DataList绑定的时候把
包含在<ItemTemplate></ItemTemplate>里的所有控件改名了,所以javascript再document.getElementById('ListBox1')
的时候找不到控件。请各位高手帮帮忙,我弄了半天了.......才上来求助的

------解决方案--------------------



<span style="font-size: 9pt" > <a href="#" onclick="Add(document.getElementById( '<%=ListBox1.ClientID %> '),document.getElementById( '<%=ListBox2.ClientID%> '))" >添加>> </a > </span >    


------解决方案--------------------
这里的listbox他被包含在DataList的子控件集里了 ,解析到 页面时,客户端的id已经改变(你可以点反键查看源文件),
而js代码中的id只能是客户端的id,不能是服务器端的(也就是C#中的)。
------解决方案--------------------
我想到两种方法:一种在服务端来解决,一种在客户端来触决

服务器端解决:
首先,把DataList中的<a>添加>> </a >改成服务器端控件,如:<a href="#" id="myA" runat="server">添加</a>
然后,给DataList添加OnItemDataBound事件,在事件处理程序中,给myA添加onclick属性,如:
protected void DataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
HtmlAnchor myA = e.Item.FindControl("myA") as HtmlAnchor;
if (myA != null)
{
ListBox l1 = e.Item.FindControl("ListBox1");
ListBox l2 = e.Item.FindControl("ListBox2");

myA.attributes.Add("onclick", "Add(document.getElementById('" + l1.ClientID.ToString() + "'),document.getElementById('" + l2.ClientID.ToString() + "')")
}
}



在客户端来解决:
使用DOM,楼主