javascript onchange vs onkeyup事件<Select>菜单(在Firefox中,上下键don&
javascript onchange vs onkeyup events for <Select> menu (Up and Down keys don't fire onchange event in Firefox)
我有一个在IE和Opera中完美工作的<select id="myselect" name="myselect" onChange="(myfunction();)">...</select>
。"完美"一词是指当您通过鼠标或"Up","Down","PageUp"(不用于Opera),"PageDown"(不用于Opera),"Home"answers"End"键在选择菜单激活时(蓝色)更改下拉列表中的值时触发的事件。当你使用Firefox, 3.6.15测试时,问题出现了。当你使用"上"answers"下"时,什么都不会发生,但对于鼠标来说,它仍然有效。你推荐使用onkeyup事件吗?我试过了,它"捕捉"上下,但是,IE似乎有onChange和onkeyup事件。但我只需要一件事。人们如何解决这个问题?
谢谢。
我建议您继续使用change
事件。Firefox的实现对键盘用户来说很有意义。如果你选择select
元素,并使用向上和向下键选择一个条目(你必须按下他们很多很长的列表),你不想在网页上触发大量的动作。一旦您选择了正确的条目并转移到其他内容,就可以执行该操作了。
这是一个非常肮脏的hack,但是您可以通过执行以下操作来强制触发change
事件:
element.addEventListener('keyup', function(evt){
evt.target.blur();
evt.target.focus();
}, false);
所以你也要为change
注册一个事件监听器,当用户通过上面的代码按下<select>
上的一个键时,这个函数将被调用。
你可能想把这个限定在Firefox上,但是我猜你必须使用UA嗅探,所以这取决于你是否可以接受。
源你可以聪明一点,为keyup事件创建自己的处理程序,它会测试键码,看看它是一个向上的箭头还是向下的箭头,并相应地触发更改事件。
我自己的js不够好,不能给你写一个例子,但我可以展示一些示例jQuery来做到这一点:
$('yourSelect').keyup(function(e)
{
if (e.keyCode===38)
{
//this is an up arrow press
//trigger the change event
$('yourSelect').change();
}
else if (e.keyCode===40)
{
//down arrow has pressed
//trigger the change event
$('yourSelect').change();
}
});
- 为什么这在IE中的工作方式与在Firefox中不同
- JS可以在Chrome中工作,但不能在Firefox中工作
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- createElement("a") - FireFox JavaScript
- 为什么javascript:void(0)在Firefox中不起作用
- Facebook登录按钮没有'不能在Firefox上工作
- jpm的默认Firefox路径没有'不起作用
- Don'不允许将焦点集中在自动完成的选择上
- 重载JS'firefox中的对象原型
- javascript如果图像不存在don't加载它
- Ajax调用在Firefox中不会自动响应
- JS在firefox中无法正常工作
- append元素don'不要在提交时出现
- AngularJS指令部分应用的函数don'不起作用
- firefox插件和dev/panel之间的通信
- 'Alt'keyup事件don'不能在Firefox上工作
- DalekJS:Firefox浏览器打开,测试don't运行
- ng模糊don't在firefox上用输入数字触发事件
- javascript onchange vs onkeyup事件
- 尝试在html5中访问网络摄像头:Firefox工作,Chrome和Opera don't