【问题标题】:Check if gridview row is selected or not with javascript检查是否使用javascript选择了gridview行
【发布时间】:2015-06-10 09:10:14
【问题描述】:

我有以下情况:我有一个asp gridview,我已经用javascript实现了行选择(我可以通过单击它的每个单元格来选择一行)。触发的事件是通过 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,"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');
        });

是否有人可以弄清楚缺少什么可以帮助解决问题。如果重复点击时触发的功能,我可以通过post检查它是否被选中。

【问题讨论】:

  • 在选定的索引更改时会调用此事件。尝试使用它
  • 我已经在我的 gridview 上将此事件用于其他目的。你能解释一下你的意思吗?

标签: javascript c# jquery asp.net gridview


【解决方案1】:

已编辑

如果您想使用 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

【讨论】:

  • 也许我的解释不清楚。我想保持点击无处不在的选择,但我不想在已经选择该行时触发它。我相信这并不难,只是需要检查该行是否已经被选中。我只是希望有一种javascript方法来检查这一点。 @ChronoMTB - 您指向的链接是事件背后的代码,这不是问题。
  • 我不明白你在问什么。
  • 用例:您有 gridview1,可以通过单击行上的任意位置来选择其行。您选择第 1 行。现在您要通过操作编辑命令编辑行数据。当您单击包含文本的文本框时,为了获得焦点,您会触发刷新,因为该行已被单击,因此再次被选中。我想检查何时在客户端(javascript)上单击该行以检查它是否已被选中。如果是,则返回 false,否则选择 $rowindex。一切都必须在客户端,因为如果不需要,则不得触发回发。
  • @g_brahimaj 我已经编辑了我的答案。如果这不包括您的情况,我建议您为您的 gridview 添加一些精简代码,其中包含有关您想要完成的更多详细信息。如果您希望这是一个纯粹的客户端解决方案,我看不出使用 asp gridview 背后的很多原因。
猜你喜欢
  • 2014-02-07
  • 1970-01-01
  • 2010-11-27
  • 2022-01-15
  • 1970-01-01
  • 2012-02-22
  • 2012-01-07
相关资源
最近更新 更多