使用JavaScript查找发件人

时间:2013-06-17 18:00:51

标签: javascript gridview

我试图找出GridView中的哪个按钮通过确定它所在的行来调用JavaScript函数。我正在使用ASP.NET。这是必要的代码:

JavaScript函数(仅限重要部分):

function get_notes(sender) {
    //...
    var grid = document.getElementById('<%= PartGrid.ClientID %>');
    var r = 1;
    for (var i = 1; i < grid.rows.length; ++i) {
        if (grid.rows[i].cells[4] == sender) {  //the button is in cells[4]
            r = i;
        }
    }
    alert(r);  //always shows me "1"
    //...
}

调用get_notes的按钮(它位于PartGrid,第4列,模板字段中):

<asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="false" Text="Show" 
    OnClientClick="get_notes(this); return false;" />

我需要找到单击按钮的行,因为我需要使用grid.rows[r].cells[0].innerText来执行ActiveXObject SQL查询。我知道ActiveXObject和SQL查询的工作原理,我已经用虚拟值测试了它。这段代码有什么问题,有没有更好的方法来找到我点击的按钮行?

1 个答案:

答案 0 :(得分:0)

您确定知道桌子中有多少行吗?我注意到i以初始值1开始,而不是0.第一行将是grid.rows[0]。您还应该仔细检查您是否拥有正确的单元格,<%= PartGrid.ClientID %>行正确定位表格。

如果这些是正确的,那么当渲染元素时,该函数可能还不存在。这意味着onclick事件不会被正确绑定。确保在页面的头部或至少在控件上方的某个位置定义功能。另外,请确保在定义函数之前不要等待document.onload事件。在呈现页面之前,您需要它才能存在。

你的基本方法似乎很好。它在这里正常工作:http://jsfiddle.net/LDHn7/


编辑:

我不知道为什么我之前没有注意到这一点。问题是sender是代表您的LinkBut​​ton的a元素。您将其与包含td进行比较。根据HTML输出的结构(具体来说,你的a是否嵌套在其他内容中),你可能想要这样的东西:

if (grid.rows[i].cells[4] == sender.parentNode) { 

示范:http://jsfiddle.net/AngH2/

请注意,如果您在LinkBut​​ton上放置客户端ID /类和/或使用jQuery,那么整个任务将会变得更加容易。