preventDefault()不能处理Firefox 9.0.1中的SELECT元素

时间:2012-01-15 13:37:56

标签: jquery events firefox event-handling preventdefault

我意识到还有其他一些关于preventDefault()无法使用Firefox的问题,但是他们没有帮助我。

我有三个SELECT列表,我想要的是使用箭头键在它们之间导航而不更改任何值。该代码在Chrome中运行良好,但在Firefox中,它会移动焦点,然后更改刚刚移动到的元素的值。

http://jsbin.com/ofitif/3/edit

JavaScript的:

$(document).ready(function () { 
  $('.myinput').keydown(function (evt) { onkeydown(evt); });
  $('.myinput:first').focus(); 
}); 

function onkeydown(evt) {
  evt.preventDefault();
  console.log(evt.which);
  if(evt.which == 39) {
    $(document.activeElement).next().focus();
  }
  else if(evt.which == 37) {
    $(document.activeElement).prev().focus();
  }             
}

HTML:

<div id="inputs">
    <select class="myinput">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
    <select class="myinput">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
    <select class="myinput">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </select>
</div>

3 个答案:

答案 0 :(得分:1)

http://mxr.mozilla.org/mozilla-central/source/layout/forms/nsListControlFrame.cpp中的

nsListControlFrame::KeyPress似乎无法检查是否阻止了默认操作。提交错误?

答案 1 :(得分:1)

根据你的要求尝试传递值以防止默认..这将是类似下面..

evt.preventDefault ? evt.preventDefault() : evt.returnValue = false;

它对我有用plz试试.......

答案 2 :(得分:0)

false处理程序返回keydown

$('.myinput').keydown(function (evt) { onkeydown(evt); return false; });