我正在使用在辅助功能项目上围绕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的任何值,则它不会响应箭头键。
答案 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)