Chrome显示未定义的keyCode

时间:2012-07-05 19:47:26

标签: c# javascript asp.net

所以我有一个下拉列表,当用户从列表中选择某些内容并按Enter而不是单击时,可以使用所选数据刷新页面。

它在IE和Firefox中运行得很完美,但Safari& Chrome似乎完全无视它。

这是我将属性添加到下拉列表的位置:

cboContext.Attributes.Add("OnKeyDown", "if (typeAhead(event,'" + cboContext.ClientID + "') == 1) contextPostback();");

似乎忽略了Chrome和Safari中的OnKeyDown属性

修改:

根据Sime和Nil的工作和评论,我发现Chrome无法识别keyCode,它显示为未定义。

我已将我的typeAhead()代码放在jsFiddle

这是我为keyCode声明变量的地方:

var charCode = evt.keyCode || evt.which;

有没有人知道为什么它会保持未定义?

3 个答案:

答案 0 :(得分:2)

您可以使用“onchange”属性(另外,或者替换“onkeydown”属性)。

在Chrome中,当SELECT元素打开并按下ENTER时,将执行“onchange”代码。

现场演示: http://jsfiddle.net/nQhUT/3/

答案 1 :(得分:0)

事件名称区分大小写。该活动应该是“onkeydown”。 IE可能不强制执行此操作?

cboContext.Attributes.Add("onkeydown", "if (typeAhead(event,'" + cboContext.ClientID + "') == 1) contextPostback();"); 

答案 2 :(得分:0)

修改

我不确定inputBuffer.accumString在你的typeAhead函数中做了什么,当我用小提琴尝试它时,它破坏了代码。

如果您尝试使用 onchange 调用typeAhead函数,则以下代码中的charCode将是未定义的。你只能在浏览器上的Keyup / keyDown上获得keyCode。请检查this

var charCode = evt.keyCode || evt.which;

如果你仔细检查你的功能,它只返回1并在inputBuffer上执行一些操作,如果按下键是输入,否则它返回-1。如果您可以按照ŠimeVidas而不是onkeydown / onkeyup的建议使您的功能在 onchange 上运行,那么它将适用于各种浏览器。