在选择中阻止向右/向左箭头导航

时间:2011-11-02 21:45:21

标签: javascript jquery html

我有3个选择,我启用键盘导航(左右箭头键)在它们之间移动。按右箭头键或左箭头键时的默认行为是向上/向下移动列表。

我的解决方案可以在选择之间移动,但每次移动到新选择时,您刚刚移动的选择中的选定值会根据您按下的箭头向上或向下移动。

有没有办法阻止选择的默认左右箭头键?我尝试过e.preventPropagation和e.preventDefault,但这似乎不起作用。

JSFIDDLE

3 个答案:

答案 0 :(得分:1)

我只是想通了。当我需要绑定到keydown事件时,我绑定了keypress事件。绑定到keydown时,您可以使用e.preventDefault()。

JSFIDDLE SOLUTION

答案 1 :(得分:1)

由于OP's solution在Firefox中不起作用,因此我为known bug in Firefox创建了一种解决方法。 基本上event.preventDefault不会阻止Firefox中<select>节点上的

So here's the workaround in action

有关详细信息,请参阅my detailed answer on similar question

答案 2 :(得分:0)

无法在Firefox中使用它来阻止事件默认....而且Ruud解决方案太复杂了。所以我基于同样的想法实现了这个简单而干净的解决方案:

$('select').on('keydown', function( e ){
    switch(e.keyCode) { 
       // User pressed "left" or "right" arrow
       case 37:
       case 39:
           var val = $(this).val();
           var $slt = $(this).one('change', function(){
               $slt.val( val ).change();
           });
       break;
    }
});

唯一不方便的是&#34;改变&#34;事件被触发两次,因此您的应用可能会照顾到这一点。