Chrome 显示未定义密钥代码

Chrome showing undefined for keyCode

本文关键字:代码 密钥 未定义 显示 Chrome      更新时间:2023-09-26

所以我有一个下拉列表,当用户从列表中选择某些内容并按 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;

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

您可以使用"onchange"属性(另外,或作为"onkeydown"属性的替代品)。

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

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

事件名称区分大小写。事件应为"onkeydown"。IE可能不会强制执行吗?

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

编辑:

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

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

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

如果你仔细检查你的函数,它只返回 1 并在 inputBuffer 上执行一些操作,如果按下键是输入或 Tab 否则它返回 -1。 如果你能按照 Šime Vidas 的建议让你的函数在 onchange 上工作,而不是 onkeydown/onkeyup,它将跨浏览器工作。