Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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/3/html/74.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
Javascript 以编程方式从ListView设置输入框的焦点';s ItemInvoked事件[Windows 8 Metro HTML5]_Javascript_Html_Input_Windows 8_Microsoft Metro - Fatal编程技术网

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

Javascript 以编程方式从ListView设置输入框的焦点';s ItemInvoked事件[Windows 8 Metro HTML5],javascript,html,input,windows-8,microsoft-metro,Javascript,Html,Input,Windows 8,Microsoft Metro,编辑:如果尚未在Windows 8上开发,请不要尝试回答此问题。不要投票表决。甚至不要读它。这不是web应用程序或网站,也不在浏览器中运行。请停止下载您不理解的投票内容。这是一个在Windows运行时环境中运行的Windows 8 METRO HTML5/js应用程序 原始问题: 我希望光标在输入框中“闪烁”,准备接收输入。我正在使用javascript设置焦点。这不起作用: document.querySelector("#input-box").focus(); 有人知道为什么吗?聚焦方法

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

原始问题:

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

document.querySelector("#input-box").focus();
有人知道为什么吗?聚焦方法不是用于此目的的正确方法吗

多谢各位


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

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


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

试试看是否有帮助:

if(document.createEvent) 
{
    document.getElementById('input-box').dispatchEvent('DOMFocusIn');
} 
else 
{
    document.getElementById('input-box').fireEvent('DOMFocusIn', event);
}

你是在哪个建筑上?消费者预览还是其他开发人员预览?我使用的是DP6(可供MS partners使用),JS标准工具可以正常工作

在my 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"/>

我认为它不起作用的唯一原因是元素在准备好之前就被访问了。这或更早的构建错误。我有一个解决方案:如果你想看的话。

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

你能试试这个项目在你的机器上是否适合你吗?你能给我们一些关于你什么时候试图设定焦点的更多见解吗?现在在你的问题中没有太多关于它发生的信息

你可以在这里下载样本

更新

好的,似乎找到了它,如果你调用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();
        }

虽然这个问题很老了。但我很难找到解决办法

首先,focus()不返回任何值,它只是设置了focus并返回undefined

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

可以使用以下查询:

element.querySelector('#label').setAttribute('tabindex','0');
element.querySelector('#label').focus();

我想“Windows8”不是我们需要的正确信息。你使用的浏览器呢?另外,考虑<代码> AutoFoCux属性。通过“Windows 8”,你是指IE 8吗?“Windows 8”是指Windows 8。谷歌。如果你提供一些标记,会对我们有好处吗只是加倍check@JT703由于WinRT JS core是基于IE9的Chakra,您能测试以下内容吗#1:尝试调用
document.querySelector(“输入框”).focus()两次#2:如果#1失败,请尝试调用
document.querySelector(#输入框”).select();document.querySelector(“#输入框”).focus()#3:如果#2失败,将焦点放在超时
setTimeout(function(){document.querySelector(#input box”).focus()},100)内。我知道是WinRT,但我刚刚介绍了IE9上发生的一些focus()错误。测试不会带来伤害,对吧?我没有使用jquery。请注意,这是一个Win8 metro应用程序。当我尝试您的建议时,没有任何更改。您确定元素的id存在吗?另外,您确定在调用此javascript时该元素存在吗?是的。我肯定。我已经调试过了,元素肯定在那里。我打赌Steve认为querySelector()是一种jquery语法。悲哀的它将进入第一个块并抛出一个错误,指出“DOMFocusIn”是一个“无效参数”。请尝试将
DOMFocusIn
替换为
onfocus
。同样的事情。这是非常令人沮丧的。这个WinRT平台与标准的web dev非常不同。因此,这个示例几乎正是我试图做的[将焦点设置在单击事件上]。我将您的元素/事件处理程序复制/粘贴到我的项目中,它们工作正常。这正是我正在做的,但我的案子仍然不起作用。我能想到的唯一区别是,我的单击来自列表视图项。事件正确触发,输入元素肯定存在,行正在执行,但什么也没有发生。此外,输入标记位于表单标记内。我不知道这是否重要,所以它肯定与ListView和事件是“itemInvoked”事件这一事实有关。我已经确认表格与此无关。我可以通过标准按钮单击事件将焦点设置为输入标记,但不能通过此ItemInvoked事件。所以问题是,为什么我不能从这个事件处理程序中设置焦点呢?如果你能提供更多关于事物流的信息(点击哪个元素,在哪里修改哪个元素,等等),那就太好了。根据你在那里所说的猜测,我要做的是:-确保输入元素是通过使其成为style.visibility='collapse'来选择的,并查看dom操作是否有效-如果是,这可能是一个焦点竞争条件问题。列表视图在幕后做了很多事情,包括设置项目的焦点(例如,如果单击某个项目,则项目现在处于焦点状态)。要测试这是否是问题所在,请执行setTimeOut以延迟输入集焦点setTimeOut没有帮助。您是否可以更新您的示例以使用正在调用的listview项而不是butt
element.querySelector('#label').setAttribute('tabindex','0');
element.querySelector('#label').focus();