如何使用jquery在gridview中获取隐藏的列值

时间:2016-05-19 06:22:47

标签: javascript jquery asp.net

在我的gridview控件中我有4列,1列是不可见的,电子邮件地址列是不可见的

    <asp:GridView id='gridData' runat='server'>
     <Columns>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lblUsername" runat="server"
  Text='<%# Bind("ToUsername") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lblfirstname" runat="server" 
Text='<%# Bind("Firstname") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lbllastname" runat="server" 
Text='<%# Bind("Lastname") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lblEmaill" runat="server" visible="false" Text='<%# Bind("EmailAddress") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>
     </Columns>
    </asp:Gridview>

这是我的JQuery我希望在点击行和电子邮件地址时显示用户详细信息

$(function () {

        var gridId = "<%= gridData.ClientID %>";
        var rowClickEvent = "#" + gridId + " tbody tr"
        var current = "";

        $(rowClickEvent).click(function () {
            var row = this;
            var username = row.cells[0].childNodes[1].innerText;
            var firstname = row.cells[1].childNodes[1].innerText;
            var lastname = row.cells[2].childNodes[1].innerText;
            var email =    row.cells[3].childNodes[1].innerText;


            alert('Username : '+username+'<br/>FullName : '+firstname+""+lastname+'<br/>Email : '+email);
    });

我也试过这段代码,但它无法正常工作:

var tr = $(this).closest('tr');            
var message = row.cells[3].next("input[name$=lblemail]").val();

3 个答案:

答案 0 :(得分:1)

visible="false"不会让控件在客户端呈现。因此,当您尝试在客户端脚本中访问它时,您将找不到它,因为该元素将不存在。如果您想在客户端访问它并希望它被隐藏,您可以使用HiddenFields或使用CSS在客户端隐藏该元素,方法是添加display:"none"visibility:"hidden"或两者。

答案 1 :(得分:0)

尝试链接此

$("#gridData tr").on("click",function(){
     var self=$(this);
     var col1=self.find("td:eq(1)").html();
     var col2=self.find("td:eq(2)").html();
     var col3=self.find("td:eq(3)").html();

    var result="COL1 = "+col1+"   COL2 = "+col2+"   COL3 = "+col3;
    alert(result);
});

如果将属性设置为visible = false,那么它将不会存在于dom中,使其显示:none或opacity = 0或使用隐藏字段

答案 2 :(得分:0)

 <asp:GridView id='gridData' runat='server'>
     <Columns>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lblUsername" runat="server"
  Text='<%# Bind("ToUsername") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lblfirstname" runat="server" 
Text='<%# Bind("Firstname") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>
    <asp:TemplateField>
                         <ItemTemplate>
                             <asp:Label ID="lbllastname" CssClass="GetEmail" runat="server" 
Text='<%# Bind("Lastname") %>' Email='<%# Bind("EmailAddress") %>'></asp:Label>
                         </ItemTemplate>
                     </asp:TemplateField>

     </Columns>
    </asp:Gridview>

并使用以下javascript:

$(document).ready(function () {


            $("#gridData tr").live("click", function () {              

                 alert($(this).closest('tr').find(".GetEmail").attr("Email"));
            });
        });

如果你将任何控件设为visible = false,它将永远不会渲染为html。 您可以使用以上示例,其中我已分配&#34; EmailAddress&#34;到自定义属性&#34;电子邮件&#34;在lbllastname控件和访问自定义属性&#34;电子邮件&#34;行点击网格时的值。这也不会向网格添加新列。 建议任何改进。