所以我有一个下拉列表,当用户从列表中选择某些内容并按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;
有没有人知道为什么它会保持未定义?
答案 0 :(得分:2)
您可以使用“onchange”属性(另外,或者替换“onkeydown”属性)。
在Chrome中,当SELECT元素打开并按下ENTER时,将执行“onchange”代码。
答案 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 上运行,那么它将适用于各种浏览器。