18

编辑: 如果您还没有在 Windows 8 上开发,请不要尝试回答这个问题。不要投票。甚至不要阅读它。这不是 Web 应用程序或网站,也不能在浏览器中运行。请停止对您不理解的内容进行投票。这是在 Windows 运行时环境中运行的 Windows 8 METRO HTML5/js 应用程序。

原始问题:

我希望光标在输入框中“闪烁”,准备接收输入。我正在使用 javascript 来设置焦点。这不起作用:

document.querySelector("#input-box").focus();

有谁知道为什么?焦点方法不是正确的方法吗?

谢谢你。

编辑#2:所以它肯定与我试图将焦点设置到 ListView 的“itemInvoked”事件的输入这一事实有关。事件正确触发,元素可从事件处理程序访问,并且该行在执行时没有错误。我可以从标准按钮单击事件将焦点设置到我的输入标记,但不能从 ItemInvoked 事件。所以问题是,为什么我不能在这个事件处理程序中设置焦点?

4

5 回答 5

10

我创建了这个只有一个文本框的小测试项目,并在 onload 中以与您完全相同的方式设置焦点。我在模拟器和本地机器上都试过了,这两种方法似乎都有效。

如果这个项目在你的机器上为你工作,你能试试吗?您能否给我们一些关于您何时尝试设定焦点的更多见解?现在在你的问题中没有太多关于它何时发生的信息。

您可以在此处下载示例http://www.playingwith.net/Temp/TestFocusApplication.zip

更新

好的,似乎找到了它,如果您使用将焦点设置到文本框的函数调用 msSetImmediate 函数,它似乎可以工作。我没有上传测试示例的选项,因此您可以在下面找到我附加 ItemInvoked 处理程序并调用 setFocus 函数的代码。

 var listView = document.getElementById("basicListView");

                listView.winControl.addEventListener("iteminvoked", function (evt) {
                    if (listView.winControl.selection.count() > 0) {                        
                        msSetImmediate(setFocus);
                    }
                });

function setFocus() {
            //Set focus on input textbox;
            var input = document.querySelector("#input-box")
            input.focus();
        }
于 2012-05-25T06:58:17.833 回答
1

你在哪个版本?消费者预览或其他开发预览?我在 DP6(MS 合作伙伴可用)并且 JS 标准的东西有效。

在我的 default.html 中,我有:

<input id="input1" type="text" value="one"/>
<input id="input2" type="text" value="two"/>
<input id="focus_btn" type="button" value="Set focus 1"/>
<input id="focus_btn2" type="button" value="Set focus 2"/>

然后在我的 default.js 中,在 app-launched-loaded 样板函数中,我有:

document.querySelector('#focus_btn').addEventListener('click', function () {
    var input1 = document.querySelector('#input1').focus();            
});

document.querySelector('#focus_btn2').addEventListener('click', function () {
    var input1 = document.querySelector('#input2').focus();            
});

我认为它不起作用的唯一原因是元素在准备好之前就被访问了。那个或更早的构建错误。如果你想看,我有解决方案: http ://www.mediafire.com/? ghz49gtfxlgr7en 。

于 2012-05-25T06:25:38.600 回答
0

尝试使用非 jquery 常规 javascript,例如

document.getElementById( 'myElementsID' ).focus()

于 2012-05-21T18:55:03.927 回答
0

试试这个看看是否有帮助:

if(document.createEvent) 
{
    document.getElementById('input-box').dispatchEvent('DOMFocusIn');
} 
else 
{
    document.getElementById('input-box').fireEvent('DOMFocusIn', event);
}
于 2012-05-23T13:59:32.733 回答
0

虽然这个问题很老了。但我努力寻找解决方案。

首先 .focus() 不返回任何值,它只是设置焦点并返回 undefined 。

此外,当我们将焦点设置在某个元素上时,请确保该元素存在 tabindex,否则它不会聚焦(主要在 chrome 中)。

可以使用以下查询:

element.querySelector('#label').setAttribute('tabindex','0');
element.querySelector('#label').focus();
于 2017-07-31T09:47:52.033 回答