1

我试图通过找出它所在的行来找出 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 查询的东西有效,我已经用虚拟值测试了它。这段代码有什么问题,有没有更好的方法来找到我单击的按钮所在的行?

4

1 回答 1

0

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

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

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


编辑:

我不知道为什么我以前没有注意到这一点。问题是代表您的 LinkBut​​tonsendera元素。您正在将其与td包含它的内容进行比较。根据 HTML 输出的结构(特别是,您a是否嵌套在其他任何内容中),您可能需要这样的内容:

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

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

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

于 2013-06-17T18:20:18.600 回答