菜单的javascript onchange vs onkeyup事件(在Firefox中,上下键不触发onchange事件)

菜单的javascript onchange vs onkeyup事件(在Firefox中,上下键不触发onchange事件),javascript,firefox,select,onchange,Javascript,Firefox,Select,Onchange,我有一个。。。这在IE和Opera中非常有效。单词perfect是指当选择菜单为活动蓝色时,通过鼠标或向上、向下、PageUpnot for Opera、PageDownnot for Opera、Home和End键更改下拉列表中的值时触发的事件。当您使用Firefox 3.6.Xv进行测试时,就会出现问题。当你上下使用鼠标时,什么都不会发生,但对于鼠标来说,它仍然有效。 您建议使用onkeyup事件吗?我已经试过了,它能上下转换,但(似乎同时有onChange和onkeyup事件)。但我只需要

我有一个。。。这在IE和Opera中非常有效。单词perfect是指当选择菜单为活动蓝色时,通过鼠标或向上、向下、PageUpnot for Opera、PageDownnot for Opera、Home和End键更改下拉列表中的值时触发的事件。当您使用Firefox 3.6.Xv进行测试时,就会出现问题。当你上下使用鼠标时,什么都不会发生,但对于鼠标来说,它仍然有效。 您建议使用onkeyup事件吗?我已经试过了,它能上下转换,但(似乎同时有onChange和onkeyup事件)。但我只需要一件事。 人们如何解决这个问题


谢谢。

我建议您继续使用更改事件。Firefox的实现对于键盘用户来说意义重大。如果您用tab键指向select元素,并使用向上键和向下键选择一个条目,并且您必须多次按这些键才能得到一个很长的列表,那么您就不希望在网页上触发大量的操作。选择正确的条目并转到其他内容后,执行操作是可以的。

我建议您继续使用更改事件。Firefox的实现对于键盘用户来说意义重大。如果您用tab键指向select元素,并使用向上键和向下键选择一个条目,并且您必须多次按这些键才能得到一个很长的列表,那么您就不希望在网页上触发大量的操作。一旦选择了正确的条目并转到其他内容,就可以执行该操作。

您可以很聪明地为keyup事件创建自己的处理程序,该处理程序测试keycode是向上箭头还是向下箭头,并相应地触发更改事件

我自己的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();
    }
});

您可以很聪明地为keyup事件创建自己的处理程序,该处理程序测试keycode以查看它是向上箭头还是向下箭头,并相应地触发更改事件

我自己的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();
    }
});

这是一个相当肮脏的黑客行为,但您可以通过以下方式强制触发更改事件:

element.addEventListener('keyup', function(evt){
    evt.target.blur();
    evt.target.focus();
}, false);
因此,您还需要注册一个事件监听器来进行更改,当用户通过上面的代码按下按钮时,该函数将被调用

您可能只想将其应用于Firefox,但恐怕您必须使用UA嗅探,所以这取决于您是否可以接受


这是一个相当肮脏的黑客行为,但您可以通过以下方式强制触发更改事件:

element.addEventListener('keyup', function(evt){
    evt.target.blur();
    evt.target.focus();
}, false);
因此,您还需要注册一个事件监听器来进行更改,当用户通过上面的代码按下按钮时,该函数将被调用

您可能只想将其应用于Firefox,但恐怕您必须使用UA嗅探,所以这取决于您是否可以接受


当dom元素失去焦点且值已更改时,firefox会触发更改事件。当dom元素失去焦点且值已更改时,firefox会触发更改事件。可以使用explorer.exe中的字母和pgup/pgdown来选择a中的值。所以我认为您应该处理除tab之外的所有内容。可以使用explorer.exe中的字母和pgup/pgdown来选择a中的值。所以我想你应该处理所有的事情,除了账单。