Javascript 为什么iOS Safari Mobile(iPhone/iPad)没有触发模糊事件?
我有两个事件处理程序绑定到锚标记:一个用于聚焦和模糊 处理程序在桌面上启动,但在iphone和ipad中,只有focus正确启动。如果在锚定标记外单击,则不会触发模糊(仅当单击页面中的其他表单元素时才会触发模糊): HTML:Javascript 为什么iOS Safari Mobile(iPhone/iPad)没有触发模糊事件?,javascript,iphone,html,ios,ipad,Javascript,Iphone,Html,Ios,Ipad,我有两个事件处理程序绑定到锚标记:一个用于聚焦和模糊 处理程序在桌面上启动,但在iphone和ipad中,只有focus正确启动。如果在锚定标记外单击,则不会触发模糊(仅当单击页面中的其他表单元素时才会触发模糊): HTML: 测试内容 如果某个锚点附加了任何事件,在iOS中第一次点击它会导致锚点进入悬停状态并聚焦。轻触可移除悬停状态,但链接仍保持聚焦。这是故意的。要在iOS上正确控制应用程序,您需要实现基于触摸的事件,并对这些事件做出反应,而不是桌面事件 有。这是一个黑客攻击,但是你可以通过
测试内容
如果某个锚点附加了任何事件,在iOS中第一次点击它会导致锚点进入悬停状态并聚焦。轻触可移除悬停状态,但链接仍保持聚焦。这是故意的。要在iOS上正确控制应用程序,您需要实现基于触摸的事件,并对这些事件做出反应,而不是桌面事件
有。这是一个黑客攻击,但是你可以通过在每个DOM元素上注册一个点击处理程序来触发.blur。这将从以前聚焦的元素中移除焦点
$('*').click();
$('html').css('-webkit-tap-highlight-color', 'rgba(0, 0, 0, 0)');
第二行在单击图元时删除高亮显示
我知道这是次优的,但它可能会让你走。如果你使用触摸设备,你可以使用touchleave或touchend事件来处理用户在区域外单击的情况
$("a").on('touchleave touchcancel', function () {
// do something
});
要使此功能正常工作,您需要更新焦点功能,以侦听“打开”单击事件,如下所示
$("a").on("click", function (e) {
if(e.handled !== true) {
e.handled = true
} else {
return false
}
// do something
})
我已经检查了@NicholasShanks答案中的所有文档,但是测试所有事件时有点沮丧 Android和iOS:
- 在Android上测试
//元素>>要触发的元素
//os>>在我的例子中返回操作系统“ios”或“android”的函数
元素。addEventListener(os=='ios'?'mouseout':'blur',()=>{
//做点什么
})
模糊事件不会触发,因为当您在不可单击元素的锚定标记外单击时,iOS会忽略该单击(并且单击事件不会触发)
有几个线程与此相关(例如)。您可以通过将光标:指针添加到
或其他将执行单击的元素来修复它。我在中发现了另一件有趣的事情,那就是仅当我单击可单击元素时,锚定标记才会失去焦点。我已经阅读了发布的指南,仍然看不到如何检测输入元素何时丢失What’s lost focus?你能发布一个代码示例吗?@ChrisFox抱歉,我没有任何代码示例。你必须点击另一个表单元素来转移焦点(并在上一个表单元素上获得一个模糊事件)。不要像这样针对页面上的每个元素。这会为每个.Single.Dom.element都设置一个侦听器。这对性能非常糟糕。
$("a").on('touchleave touchcancel', function () {
// do something
});
$("a").on("click", function (e) {
if(e.handled !== true) {
e.handled = true
} else {
return false
}
// do something
})