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