我试图找出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查询的工作原理,我已经用虚拟值测试了它。这段代码有什么问题,有没有更好的方法来找到我点击的按钮行?
答案 0 :(得分:0)
您确定知道桌子中有多少行吗?我注意到i
以初始值1开始,而不是0.第一行将是grid.rows[0]
。您还应该仔细检查您是否拥有正确的单元格,<%= PartGrid.ClientID %>
行正确定位表格。
如果这些是正确的,那么当渲染元素时,该函数可能还不存在。这意味着onclick
事件不会被正确绑定。确保在页面的头部或至少在控件上方的某个位置定义功能。另外,请确保在定义函数之前不要等待document.onload
事件。在呈现页面之前,您需要它才能存在。
你的基本方法似乎很好。它在这里正常工作:http://jsfiddle.net/LDHn7/
我不知道为什么我之前没有注意到这一点。问题是sender
是代表您的LinkButton的a
元素。您将其与包含的td
进行比较。根据HTML输出的结构(具体来说,你的a
是否嵌套在其他内容中),你可能想要这样的东西:
if (grid.rows[i].cells[4] == sender.parentNode) {
请注意,如果您在LinkButton上放置客户端ID /类和/或使用jQuery,那么整个任务将会变得更加容易。