2

以下方案与 Windows Phone 设备(IE 或 Edge)相关。

场景一:

如果输入元素具有焦点并且软键盘向上,则按下硬件返回键会模糊焦点元素并按应有的方式弹出键盘。但是,没有触发相应的模糊事件。

场景二:

如果输入元素具有焦点并且软键盘已打开,则在输入元素外部点击会模糊焦点元素,弹出键盘并触发模糊事件。

问题:

当按下硬件后退键并且输入元素具有焦点时,有没有办法使模糊事件触发?

重现问题的 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 Phone 8.1 Update 2 - Internet Explorer 11)

在诺基亚 Lumia 635 上测试。操作系统版本:10.0.10586.29 (Windows 10 Mobile - Microsoft Edge 13)

4

2 回答 2

3

因此,经过进一步调查,我将使用“停用”事件而不是“模糊”事件。

'deactivate' 事件看起来像是特定于 IE 的,至少除了 MSDN 之外我找不到任何文档。

于 2013-06-07T12:06:19.357 回答
0

是的,当您按下硬件后退按钮时,文本框仍然是焦点。

我们可以有一个解决方法。当文本框聚焦时,即使按下硬件后退按钮,您也可以触发模糊。

当您点击文本框并调整窗口大小时,软键盘就会启动。因此,您必须捕获屏幕调整大小事件,并且可以在每次软键盘向上或向下时完成,即当软键盘向上或向下时屏幕大小会发生变化。

你必须为此编写一个 JavaScript 代码,并且应该写在下面

$(document).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();
                   }                
                }
        }

    });

每次点击文本框并在 Focus 事件调用上设置变量 focusSearchedBox 时都会调用 Focus 事件。

它对我有用。

于 2013-08-01T07:35:05.473 回答