Javascript 如何自动聚焦一个字段?
我正在用KnockoutJS和Node.js编写一个小型聊天客户端/服务器应用程序,一切都很好,只是在我发送消息后,我失去了对消息字段的关注,用户每次想键入消息时都必须重新单击它(非常烦人)。你们知道我能做什么吗?以下是模板:Javascript 如何自动聚焦一个字段?,javascript,node.js,knockout.js,Javascript,Node.js,Knockout.js,我正在用KnockoutJS和Node.js编写一个小型聊天客户端/服务器应用程序,一切都很好,只是在我发送消息后,我失去了对消息字段的关注,用户每次想键入消息时都必须重新单击它(非常烦人)。你们知道我能做什么吗?以下是模板: {{each messages()}} From:${From} ${time}${text} {{/每个}} 正如你所看到的,我已经尝试了所有可能的方法来聚焦这个领域,但似乎没有一种有效。有什么建议吗?我认为您的问题可能是您的“send”方法执行了一个异步发回到
{{each messages()}}
- From:${From}
${time}${text}
{{/每个}}
正如你所看到的,我已经尝试了所有可能的方法来聚焦这个领域,但似乎没有一种有效。有什么建议吗?我认为您的问题可能是您的“send”方法执行了一个异步发回到服务器的操作,在成功回调中,它可能会将消息推送到您的消息队列中。发生这种情况时,模板将重新渲染,焦点将丢失。因此,这发生在调用
$('#'+channel).focus()
之后,因为发送是异步完成的
在没有看到发送功能的情况下无法确定
一个选项是将“channel”作为另一个参数传递给“send”函数,然后在将消息推送到消息之后,在AJAX请求的成功回调中根据通道设置焦点
此处示例:Knockout现在有一个绑定。原因是您的发送函数是异步的 如果您使用的是ajax,则设置
async=false
或者,
您可以使用视图模型属性来保存布尔值
并使用hasfocus
绑定
function chatVM()
{
this.focus = ko.observable(true);
}
var vm = new chatVM();
然后在提交函数中
set vm.focus(true);
或
将消息框的hasfocus
设置为“始终为真”
div class="msgbox" data-bind="hasfocus: ko.observable(true)"></div>
div class=“msgbox”data bind=“hasfocus:ko.observable(true)”>
结合Aran和Arun的答案,对我来说最简单的方法是:
<input id="channel" type="text" data-bind="hasfocus: true" />
RP,你我的朋友是大师!关于异步调用和重新呈现模板之间的时间安排,您是对的,所以我只是把它放在正确的位置,它就工作了!再次感谢您Hey RP,我认为指向knockout-latest-debug.js文件的链接已断开。因此,JSFIDLE示例也被破坏了。我以前也见过同样的问题。只是想让你知道,谢谢。很多旧的fiddle都链接到Github上的构建输出,而KO已经不存在了。我更新了小提琴。如果你看到其他人,请告诉我。