检查是否使用 javascript 选择了网格视图行

本文关键字:网格 视图 选择 javascript 是否 检查 | 更新日期: 2023-09-27 17:55:14

我有以下情况:我有一个asp网格视图,我已经用javascript实现了行选择(我可以通过单击它的每个单元格来选择一行)。触发的事件是通过javascript点击的,我遇到了一个问题。当我尝试通过行编辑命令编辑该行的内容时,在我单击文本框以聚焦它的那一刻,行单击事件再次触发,并且我失去了文本框的焦点。这样我就有了想要的效果,我可以通过单击任何地方来选择网格视图,但我无法编辑行的内容。

在代码隐藏上启用整行选择:

protected void gvMyQuizz_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.ToolTip = "Click to show the questions of the quiz";
            e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.gvMyQuizz,"Select$"+e.Row.RowIndex);
        }
    }

最有用的事情是,如果我可以创建一个 javascript 函数,该函数可以检查我被单击的行是否已被选中,因此我可以返回 false,否则 select$row,但我在网上没有找到太多帮助。我需要通过javascript完成这个。任何帮助将不胜感激。

更新

我已经更改了添加到 onclick 事件行的属性:

protected void gvMyQuizz_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.ToolTip = "Click to show the questions of the quiz";
                e.Row.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.gvMyQuizz, "selectRow(" + e.Row.RowIndex+");");
            }
        }

Javascript:

function selectRow(index) {
            var $selected = $("#gvMyQuizz .alt");
            if ($selected.length == 0) {
                console.log('nothing');
            } else if ($selected.length == 1) {
                console.log('one');
            } else {
                console.log('problem');
            }
        }

单击该行时我得到的一个函数,但这只触发一次,我不知道为什么:

$("[id*=gvMyQuizz] td").click(function () {
            console.log('clicked');
        });

有人可以找出缺少什么可以帮助解决问题。如果我点击时触发的功能重复,我可以通过这篇文章在那里检查它是否被选中。

检查是否使用 javascript 选择了网格视图行

已编辑

如果要使用 onclick 事件处理行选择,检查当前是否选择了单击的行的最直接选项是在服务器端保持隐藏字段运行。此字段将包含当前所选行的索引。您仍然必须触发回发到服务器,以使用类似

<input id="inp_row_index" type="hidden" runat="server" />
function select(rowIndex) {
    document.getElementById('<%=inp_row_index.ClientID %>').value = rowIndex;
    <%=Page.GetPostBackEventReference(inp_row_index) %>
}

这基本上是这里描述的方法的摘要:http://www.codeproject.com/Tips/79822/How-to-handle-a-selected-row-in-GridView-on-the-cl