2011-06-03 68 views
2

我有以下工作,只要我用鼠标从选择框中选择一个选项,或使用键盘箭头键选择选项,但使用键盘时,更改事件在我按下键盘上的输入之前不会触发。fireup与keyup和keydown

如何使用键盘方向键检测更改而不必按Enter键?

$('#select_box').change(function() { 
    some_function($(this).val()); 
}); 
+1

确实低于答案不令人满意?? – diEcho 2011-06-03 14:33:30

回答

3

你可能会想避免不必要地调用你的函数多次,如果你不小心与多个事件将发生。您可以通过检查字段的值在调用之前是否实际更改来避免此问题。这样做的一种方式,如下图所示,在球场上的属性存储与以前的值,然后使用该检查该字段的值已经调用你的函数之前更改:

var previousValuePropertyKey = 'previousValue'; 

$('#select_box').bind('keyup change', function(event) { 
    var previousValue = $(this).prop(previousValuePropertyKey); 
    var currentValue = $(this).val(); 
    $(this).prop(previousValuePropertyKey, currentValue); 

    if(previousValue != currentValue){ 
     alert(currentValue);//TODO remove alert 
     //Yourfunction(..); 
    } 
}); 

Here“SA捣鼓一个例子。

0

TRY

$('#select_box').bind('keyup change',function() { 
    some_function($(this).val()); 
}); 

Reference

+0

[这里](http://api.jquery.com/category/events/keyboard-events/)都是关键事件;你可以用'live'使用多个事件 – diEcho 2011-06-03 13:47:18

+0

不需要住在这里,说实话 - 这太过分了。就像另一个例子那样绑定在keyup上。 – amustill 2011-06-03 13:47:38

+1

@diEcho:除非需要,否则请勿使用。使用直播会更慢。即使你想实现实时功能,你应该使用委托来提高性能。 – PeeHaa 2011-06-03 13:49:33

0
$('#select_box').change(function() { 
    alert($(this).val()); 
}); 

$('#select_box').keyup(function() { 
    alert($(this).val()); 
});