4

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

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

4

3 回答 3

2

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

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

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

于 2012-07-05T20:22:36.227 回答
0

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

cboContext.Attributes.Add("onkeydown", "if (typeAhead(event,'" + cboContext.ClientID + "') == 1) contextPostback();"); 
于 2012-07-05T19:58:43.503 回答
0

编辑:

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

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

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

如果你仔细检查你的函数,它只会返回 1 并在 inputBuffer 上执行一些操作,如果按下的键是 enter 或 tab,否则它返回 -1。如果您可以按照Šime Vidas的建议让您的函数在onchange上运行,而不是 onkeydown/onkeyup,那么它将在浏览器中运行。

于 2012-07-11T17:20:19.383 回答