【问题标题】:preventDefault() not working on SELECT elements in Firefox 9.0.1preventDefault() 不适用于 Firefox 9.0.1 中的 SELECT 元素
【发布时间】:2012-01-15 13:37:56
【问题描述】:

我知道关于 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>

【问题讨论】:

  • 感谢@Andrew Whitaker 的编辑。下次我会确保自己包含代码。

标签: jquery events firefox event-handling preventdefault


【解决方案1】:

http://mxr.mozilla.org/mozilla-central/source/layout/forms/nsListControlFrame.cpp 中的nsListControlFrame::KeyPress 似乎没有检查默认操作是否被阻止。提交错误?

【讨论】:

【解决方案2】:

根据您的要求尝试传递值以防止默认值..它将如下所示..

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

它对我有用,请尝试一下.......

【讨论】:

    【解决方案3】:

    从您的 keydown 处理程序返回 false

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

    【讨论】:

    • 感谢@techfoobar,但这似乎无法在 Firefox 上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多