在网上搜过很多,看了,试了都没管用。所以问一下各位前辈,希望不要BS我的问题太浅薄。
datalist中有一张图片
一个HiddenField 叫 imgid
一个textbox 叫name
一个textbox 叫 message
一个按钮 button绑定datalist后,有N个以上表格显示出来当我点击 其中一个button的时候 如何用JS获取相对应的imgid,name,message这3个的值。自己试过的方法一:aspx
给datalist 加上  OnItemDataBound="DataList1_ItemDataBound"csButton rButton = (Button)e.Item.FindControl("Button1");//提交按钮
TextBox rname = (TextBox)e.Item.FindControl("name");
TextBox rmessage = (TextBox)e.Item.FindControl("message");
string rimage = ((HiddenField)e.Item.FindControl("imgid")).Text;rButton.OnClientClick = "aa('" + rimage + "','" + rname + "','" + rmessage + "')";JSfuction aa(a,b,c)
{
    alert(a);
    alert(b);
    alert(c);
}
弹出来的均是最初绑定时候的值,例如页面加载后,是空的,我自己写上name,message再点button,弹出来的依然是空。
方法二:aspxbutton这样写
<input id="Button1" type="button" value="发表" onclick='<%# "aa(" +((DataListItem)Container).FindControl("name").ClientID +","+((DataListItem)Container).FindControl("message").ClientID+","+((DataListItem)Container).FindControl("imgid").ClientID+")"%> ' />JSfuction aa(a,b,c)
{
    alert(a.id);
    alert(document.getElementById(a.id).value); 
    alert(document.getElementById(b.id).value);
    alert(document.getElementById(c.id).value);
}这样alert(a.id);弹出来的是相对应的类似这个格式(DataList1_ctl04_name )的值
alert(document.getElementById(a.id).value); 这样弹出的是name的值。但是结果同上,弹出来的均是最初绑定时候的值,例如页面加载后,是空的,我自己写上name,message再点button,弹出来的依然是空

解决方案 »

  1.   

    fuction aa(a,b,c)
    {
        alert(a.id);
        alert(document.getElementById(a).value);
        alert(document.getElementById(b).value);
        alert(document.getElementById(c).value);
      

  2.   


    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataList.aspx.cs" Inherits="DataList" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
        <script>
        function show(obj)
        {
            var el=obj.parentNode.getElementsByTagName('input');
            for(var i=0;i<el.length;i++)
            {
                if(el[i].type=='text')
                {
                    if(el[i].id.indexOf('txtID')!=-1)
                        alert('当前行的ID是'+el[i].value);
                    else if(el[i].id.indexOf('txtName')!=-1)
                        alert('当前行的Name是'+el[i].value);
                }
                else if(el[i].type=='hidden')
                    alert('当前行是第'+(parseInt(el[i].value)+1)+'行');
            }        
        }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
        <asp:DataList ID="dl" runat="server">
        <ItemTemplate>
        <asp:HiddenField ID="hid" Value='<%#Container.ItemIndex %>' runat="server" />    
        ID:<asp:TextBox ID="txtID" runat="server" Text='<%#Eval("ID") %>'></asp:TextBox>
        Name:<asp:TextBox ID="txtName" runat="server" Text='<%#Eval("Name") %>'></asp:TextBox>
        <asp:Button runat="server" OnClientClick="show(this);return false;" Text="显示" />
        </ItemTemplate>
        </asp:DataList>
        </div>
        </form>
    </body>
    </html>using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class DataList : System.Web.UI.Page
    {
        protected DataTable getDataTable()
        {        System.Data.DataTable dt = new System.Data.DataTable();
            System.Data.DataRow dr;
            dt.Columns.Add(new System.Data.DataColumn("ID", typeof(System.Int32)));
            dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
            dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "小明";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 2;
            dr[1] = "小强";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 3;
            dr[1] = "小张";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 4;
            dr[1] = "小李";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 5;
            dr[1] = "小关";
            dt.Rows.Add(dr);
            return dt;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                dl.DataSource = getDataTable().DefaultView;
                dl.DataBind();
            }
        }
    }
      

  3.   

    記住一點客戶端控件要邊成服務端控件,服務端控件就不要邊,是定義ID而不是NAME
      

  4.   

    上面的问题 通过Sandy945的方法解决了。非常感谢。
    我还想问个问题
    绑定datalist后,有N个以上table显示出来,table我是这样写的<table width="100%" id="tab<%#Eval("Image_ID")%>">点击button 后,获取到相对应的imgid,name,message这3个的值,并成功的写入到数据库
    然后从CS文件返回datatable给js
    代码如下:
    function get_Result_CallBack(response)
    {
        if (response.value != null)
        {
    z = 0;
    var ds = response.value;
        if(ds != null && typeof(ds) == "object" && ds.Rows != null)
        {     
                    var arrCellText=new Array();
                    arrCellText[0] = ds.Rows[0].Message ; 
                    arrCellText[1] = ds.Rows[0].Name; 
                    arrCellText[2] = "回复";
                    arrCellText[3] = "删除";
                    _tab = document.getElementById("tab"+ds.Rows[0].Img_ID);
    createRowCell(_tab,arrCellText);
        }
        
        }
        return
    }function createRowCell(tab,arrCellText)

        var trNew = tab.insertRow(0);
        for(var i=0; i<arrCellText.length; i++)
        {
            alert(arrCellText[i]);//这里是可以弹出来每个字段的值
            var tdNew = trNew.insertCell() ;
            var tnNew = document.createTextNode(arrCellText[i]) ;
            tdNew.appendChild(tnNew) ;
        }
    }
    但是我的相应的table没有任何反应,也没有报JS错误,页面无刷新。是不是他找不到相应的table还是我代码有问题
      

  5.   

    就是上面我在8楼写的那样相应的table并没有添加行
      

  6.   

    生成的table 的 id 你看了 么 
      

  7.   

    生成的 table 的 id  是tab1,tab2,tab3,tab4,tab5......这样的。
      

  8.   

    生成的 table 的 id  是tab1,tab2,tab3,tab4,tab5......这样的。
      

  9.   

    _tab = document.getElementById("tab"+ds.Rows[0].Img_ID); 
    在这句前面
    alert(ds.Rows[0].Img_ID);
      

  10.   

    alert(ds.Rows[0].Img_ID);弹出的是 当前图片的 ID
      

  11.   


    function createRowCell(tab,arrCellText) 

        var trNew = tab.insertRow(0); 
        for(var i=0; i <arrCellText.length; i++) 
        { 
             
            var tdNew = trNew.insertCell(i) ; 
            tdNew.innerText= arrCellText[i] ; 
                
        } 
    } 只要保证 _tab 能被找到,并且是相对应的 ,哪就没问题