以下方案与Windows Phone设备(IE或Edge)相关。
场景1:
如果输入元素有焦点,而软键盘已经打开,按下硬件回键会模糊焦点元素,然后弹出键盘。然而,没有相应的模糊事件触发。
场景2:
如果输入元素具有焦点,而软键盘已打开,则在输入元素外部敲击会模糊焦点元素,弹出键盘并触发模糊事件。
问题:
当按下硬件回键并且输入元素具有焦点时,是否有一种方法使模糊事件触发?
复制问题的HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title>Blur Test</title>
</head>
<body>
<p>Blur Test</p>
<input type="text" onblur="alert('onblur');">
</body>
</html>
使用addEventListener会产生相同的结果。
在诺基亚Lumia 620上测试。操作系统版本: 8.0.10211.204
编辑:
在诺基亚Lumia 640上测试。操作系统版本: 8.10.15148.160 (Windows 8.1更新2- Internet Explorer 11)
在诺基亚Lumia 635上测试。操作系统版本: 10.0.10586.29 (Windows 10 Mobile - Microsoft Edge 13)
发布于 2013-06-07 04:06:19
因此,经过进一步的调查,我将使用‘停用’事件,而不是‘模糊’事件。
“停用”事件看起来是IE特有的,至少除了MSDN之外,我在上面找不到任何文档。
发布于 2013-07-31 23:35:05
是的,当您按下“硬件后退”按钮时,文本框仍然是焦点。
我们可以想办法解决这个问题。当文本框聚焦时,即使在按下“硬件回退”按钮时,也可以触发模糊。
当你点击文本框并调整窗口大小时,软键盘就打开了。因此,您必须捕获屏幕调整大小事件,这可以在每次软键盘向上或向下时进行,即当软键盘向上或向下时屏幕大小发生变化。
您必须为此编写一个JavaScript代码,并且应该在
$(文档).ready函数
$(window).resize(function () {
var screenWidth = screen.width;
var screenHeight = screen.height;
var orientation = window.orientation;
var switchCase = "portrait";
if (orientation == 0 || orientation == 180) {
switchCase = "portrait";
} else if (orientation == 90 || orientation == -90) {
switchCase = "landscape";
}
if (focusedSearchedBox) {
if (switchCase == "portrait") {
if ($(window).height() > (screenHeight * (2 / 5))) {
var searchBox = '#' + focusedSearchedBox.id;
$(searchBox).blur();
}
}
else {
if ($(window).height() > (screenWidth * (2 / 5))) {
var searchBox = '#' + focusedSearchedBox.id;
$(searchBox).blur();
}
}
}
});
每次点击文本框并在焦点事件调用上设置变量focusedSearchedBox时,将调用Focus事件。
对我起作用了。
https://stackoverflow.com/questions/16981817
复制