我有以下情况:我有一个asp gridview,我用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,否则选择$ 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检查它是否被选中。
答案 0 :(得分:0)
被修改
如果要使用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