Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Win8 JavaScript应用程序中隐藏select元素的虚拟键盘?_Javascript_Html_Microsoft Metro_Winjs - Fatal编程技术网

如何在Win8 JavaScript应用程序中隐藏select元素的虚拟键盘?

如何在Win8 JavaScript应用程序中隐藏select元素的虚拟键盘?,javascript,html,microsoft-metro,winjs,Javascript,Html,Microsoft Metro,Winjs,我正在用JavaScript创建一个Windows8应用程序。我在标记中有以下html元素: <input id="myField1" type="number"></input> <select id="myField2"> <option value="one">One</option> <option value="two">Two</option> <option value

我正在用JavaScript创建一个Windows8应用程序。我在标记中有以下html元素:

<input id="myField1" type="number"></input>
<select id="myField2">
    <option value="one">One</option>
    <option value="two">Two</option>
    <option value="three">Three</option>
</select>

一个
两个
三

当我在没有物理键盘的设备上点击
myField1
时,会出现虚拟键盘。之后,如果我点击
myField2
,键盘将保持原位。但是我不想在这个特定的
字段中使用typeahead。是否有方法隐藏虚拟键盘,仅对
字段启用它?

根据触摸键盘文档,触摸键盘的显示和隐藏行为设计为在应用程序之间保持一致-让用户保持关注。这就是为什么显示和隐藏方法在上不可用的原因

这描述了细节,并指出了为什么在输入元素之间导航/切换时保留键盘的行为是这样设计的

还有一组控件可以在文本处理期间接收焦点 输入流,但不可编辑。而不是不必要地搅动 UI,并可能在流的中间使用户迷失方向, 触摸键盘在控件上保持可见,因为用户可能 用触摸键在控件和文本输入之间来回移动 键盘因此,如果键盘已经显示并聚焦 位于以下列表中某个类型的控件上 键盘不会隐藏自己。但是,如果键盘不可用 已经显示,它不会显示自己,除非水龙头降落在地面上 可编辑区域

总之,根据指南-应用程序应保持默认的触摸键盘。在尝试更改默认行为之前,请仔细考虑

如果您遇到一个使用键盘确实不合适的场景,白皮书还提供了解决方法的线索(不是有意的)。可以通过编程将焦点临时放在不可编辑的元素(比如按钮)上,键盘将隐藏自己。但是select控件将由于焦点的编程转移而错过点击事件,并且需要再次点击以打开其下拉列表。可能需要更多的努力,此解决方案可以得到改进。但同样,这是一个解决办法,应该明智地使用

_initializeEventHandlers: function initializeEventHandlers()
{
    myField2.addEventListener('focus', this._onfocus.bind(this));
},
_onfocus: function onfocus(event)
{
    console.log('on focus invoked');
    if (this._movingFocusInProgress)
    {
        this._movingFocusInProgress = false;
        return;
    }

    this._movingFocusInProgress = true;
    b1.focus();
    WinJS.Promise.timeout(200).then(function ()
    {
        myField2.focus();
    });
},
HTML需要有这个零大小按钮

<input id="myField1" type="number" />
<select id="myField2" role="banner">
    <option value="one">One</option>
    <option value="two">Two</option>
    <option value="three">Three</option>
</select>
<button id="b1" style="visibility:visible; border-width:0;
    border-color:transparent;outline-color:transparent; min-width:0; min-height:0"></button>

一个
两个
三