我有一个奇怪的问题。我有一个隐藏字段,其值通过javascript方法更改。只要按下ctrl键在gridview中选择了行,就会设置hiddenfield的值。
这是隐藏字段的值的分配方式(Javascript代码):
var curKey;
function checkKey()
{
//Check if contrl key is pressed or not.
if (curKey == 17)
{
document.getElementById('<%= CtrlKeyPressed.ClientID %>').value = 'Y';
}
else
{
document.getElementById('<%= CtrlKeyPressed.ClientID %>').value = 'N';
}
}
在代码中,我在gridview_rowdatabound函数中调用了这个javasxcript,如下所示:
gridview.Rows[i].Attributes.Add("onclick","checkKey();" + ClientScript.GetPostBackEventReference(grvKanban, "Select$" + i));
在.aspx页面的主体中,代码是这样的(如果在gridview中单击任何行时按下控制键,则curKey的值将为17):
<body onkeyup = "curKey = null;" onkeydown = "curKey=event.keyCode;">
对于隐藏字段,代码为:
<asp:HiddenField ID="CtrlKeyPressed" runat="server"/>
基本上我想知道在选择gridview行时是否按下Ctrl键,我想找到Hidden字段的值。 (基本上我想按Ctrl键选择多行)
当我按下Ctrl键时,当我第一次在gridview行中单击时,隐藏字段的值变为'Y',但是当选择第二行时,隐藏字段值将变为'N'(我期待按下Ctrl键后显示为'Y'?
有人可以帮忙解决这个问题吗?
感谢!!!
答案 0 :(得分:0)
可能是你的帖子重置了curKey
变量的值。您应该删除此变量,而是每次都检查隐藏字段的值。
试试这个:
function setCtrlIsDown(keyCode, isDown) {
//Check if control key is pressed or not.
if (keyCode != 17) {
return;
}
document.getElementById('<%= CtrlKeyPressed.ClientID %>').value = isDown ? 'Y' : 'N';
}
<body onkeyup="setCtrlIsDown(event.keyCode, false);" onkeydown="setCtrlIsDown(event.keyCode, true);">
在RowDataBound
: -
gridview.Rows[i].Attributes.Add("onclick", ClientScript.GetPostBackEventReference(grvKanban, "Select$" + i));
这样,变量不会在回发后重置,因为它将在ViewState中保留,并在客户端JavaScript根据需要进行更改。