bootstrap输入下拉键盘箭头

时间:2015-06-04 15:29:30

标签: javascript jquery html twitter-bootstrap twitter-bootstrap-3

我正在使用在辅助功能项目上围绕Bootstrap构建的combobox(输入+下拉列表)。

我遇到了对v3.3.0和v3.3.1之间的bootstrap的dropdown.js部分进行的更改,这些更改破坏了我的代码。

当焦点是Dropdown.prototype.keydown = function (e) { if (!/(38|40|27|32)/.test(e.which)) return 时,向上或向下键盘箭头用于触发下拉菜单,这是我想要的,因为目标是使键盘导航成为可能,但它不再起作用了

当我比较时:

https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.js

https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.js

变化来自(3.3.0,第798行)

Dropdown.prototype.keydown = function (e) {
if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return

至(3.3.1,第799行)

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:My namespace="My Package">
   <soapenv:Header>
    <Username>q</Username>
    <Password>q</Password>
   </soapenv:Header>
   <soapenv:Body>
      <Op:Op>
         <Op:int>2134</Op:int>
      </Op:Op>
   </soapenv:Body>
</soapenv:Envelope>

所以,我知道我可以用jQuery来解决它,但是这个变化真的有原因吗?如果没有,这可以被视为错误报告。

下面是我的小部件的Bootply演示。与Bootstrap 3.3.0以及以下任何内容一起使用,但如果您将bootstrap版本弹出窗口更改为高于3.3.0的任何值,则它不会响应箭头键。

http://www.bootply.com/2gHt0MWRWd

2 个答案:

答案 0 :(得分:1)

目前正在就此进行辩论, as logged in issue 15757

调整是在拉#15088(Dropdown: Ignore keydown events coming from inputs and textareas)。他们没有说“为什么”在发布版本中必须采用这条路线,但经过一些挖掘后,我能够找到涉及一些开发人员和Bootstrap团队的问题/争论。

在那次辩论中,有人提到它被添加:

  

“允许在下拉列表中的输入中输入空格”

他们仍然在集思广益,所以我可能会建议在辩论中增加两分钱。希望这会有所帮助。

答案 1 :(得分:0)

以下是对此的修复:

$('[data-toggle="dropdown"]').keydown(function(e){
  if(e.which == 40){
    $(this).dropdown('toggle');
  }
});

这只是检查向下箭头(键码40)

See it in action here