2012-03-21 155 views
1

如何跟踪SELECT元素中的更改用户使用鼠标或按Enter键选择项目之前?SELECT onChange事件

可以收听keyUp事件,该事件允许使用键盘跟踪用户在列表中的导航。但有没有更通用的方法,它允许跟踪列表“前期”的变化?

+0

你可以直到你重新载入页面之前的值存储在其中存在的局部javascript变量。 – slash197 2012-03-21 12:26:13

回答

0

Javascript支持'onbeforechange'事件,这可能会诀窍,但我不知道这是跨浏览器广泛实施?如果支持的范围足够广泛,请在更改之前存储以前的值。否则,只需将原始值存储在隐藏字段或JS变量中。

+1

需要参考。 Opera,IE,Chrome,Safari或Firefox都支持这个事件...... – 2012-03-21 12:32:57

+0

IE(至少8+)支持它,我只用它在一个封闭的IE环境中,尽管我不需要看广泛的实现。 – Purpletoucan 2012-03-21 12:44:26

+0

我已经在IE6-9,FF 11,Chrome 17,Opera 11.61,Safari 5.1.2中测试过了,但是'onbeforechange'事件不存在**(测试过'.onbeforechange = ..','addEventListener '和'.attachEvent')。 – 2012-03-21 13:39:38

0

将鼠标移到选择项上时不会发生事件。

如您所说,您可以跟踪鼠标移动。但是,由于不同的浏览器以不同的方式呈现列表,这将是一项艰巨的任务。

但是,您可以自己创建一个选择框,而不使用本机选择

0

,你必须创建一个函数这样的例子: -

function example(){ 
jQuery('select#service_billing_state').change(function() { 
//your code here 
}); 
} 

,你必须调用这个函数的onchange,的onblur, onkey,onfocus ...

2

我总是用focus click这个听众。

$('select').bind('focus click',function(){ 
//IMACHANGINGMYOPTION!!!!!!!!!! 
    //var val=$(this).val(); 
}); 

以上应于变更事件之前被触发:

$('select').change(function(){ 
//The option has been changed. 
}); 

说明:每当用户重点选择,我们也得到了所选项目的价值,我们可以前的操纵它如果触发,则为onchange事件。 click侦听器被添加,以防我们的选择已被集中,并且用户点击它在他实际选择一个选项并触发更改之前展开。

这是使用的例子,让我们跟踪前值

http://jsfiddle.net/SUKqS/8/