javascript - 在 Safari 中,选择在使用 blur() 隐藏下拉菜单后停止工作
问题描述
我有通过调用 blur() 来隐藏选择元素下拉列表的逻辑。这适用于除 Safari 之外的所有浏览器。在 Safari 中,用模糊隐藏它后,下拉菜单将不再显示 - 永远。这是该错误的再现:
var count = 0;
function foo(e) {
console.log("FOCUSSSED\nCount: " + count);
if (count < 1) {
var c = this
setTimeout(function() {
c.blur();
console.log("BLURRRRR");
}, 200)
}
count++;
}
<!DOCTYPE html>
<html>
<body>
<select onfocus="foo.call(this,event)">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</body>
</html>
有什么解决办法吗?或者苹果应该修复浏览器机制。
解决方案
经过大量修补后,我也可以看到但不能为您解决此问题。看起来 Safari 以不同的方式实现了下拉菜单,因此该blur
事件实际上并没有隐藏下拉菜单,但它确实模糊了该字段,这似乎导致尝试重新打开下拉菜单时遇到困难。
I can also confirm this behaviour when the select element is targetted by js and a event listener added to the focus event eg
var myDropdown = document.getElementById('selectizer');
myDropdown.addEventListener('focus', function( event ) {
console.log("FOCUSSSED\nCount: " + count);
if (count < 1) {
setTimeout(function() {
event.target.blur();
console.log("BLURRRRR");
}, 200)
count++;
}
}, true);
我对您的最佳建议是使用 HTML 和 CSS 重新创建选择。您可以使用普通的 CSS 来做到这一点,如下所示:
.menu .option {
display: none;
}
.menu:focus .option {
display:block;
}
只要确保你给你的 div 等 atabindex
来显示和隐藏内容。
如果您愿意,您也可以使用 JS 来完成,或者使用任何数量的现成组件,您可以通过快速 Google 找到。
推荐阅读
- r - 按行和列合并多个数据框
- postgresql - 如何在 postgreSQL 中将 oracle 转换为_single_byte()
- javascript - Blogger JavaScript 代码有问题
- html - 引导导航栏未折叠(移动)
- reactjs - 如何更改亮度并覆盖浏览器的亮度设置
反应成分 - python - 如何将我的 Shapely 多边形转换为代表(掩码数组)的 numpy 像素数组?Python
- javascript - JavaScript 切换 - 显示一些,并删除一些文本
- maven - 根据编译或提供的 maven 依赖范围产生 Ambiguous Bean 或 ClassNotfoundException
- directory - 对符号链接的文件夹写入权限 (Linux/CentOS)
- http - Fiddler 并行 http 请求限制