从ListView的ItemInvoked事件[Windows 8 Metro HTML5]以编程方式设置输入框的焦点

JT7*_*703 15 javascript html5 input microsoft-metro windows-8

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

原始问题:

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

document.querySelector("#input-box").focus();
Run Code Online (Sandbox Code Playgroud)

谁知道为什么?焦点方法不适合用于此吗?

谢谢.

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

Chr*_*anV 7

我创建了这个只有一个文本框的小测试项目,在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();
        }
Run Code Online (Sandbox Code Playgroud)