Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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 如何自动聚焦一个字段?_Javascript_Node.js_Knockout.js - Fatal编程技术网

Javascript 如何自动聚焦一个字段?

Javascript 如何自动聚焦一个字段?,javascript,node.js,knockout.js,Javascript,Node.js,Knockout.js,我正在用KnockoutJS和Node.js编写一个小型聊天客户端/服务器应用程序,一切都很好,只是在我发送消息后,我失去了对消息字段的关注,用户每次想键入消息时都必须重新单击它(非常烦人)。你们知道我能做什么吗?以下是模板: {{each messages()}} From:${From} ${time}${text} {{/每个}} 正如你所看到的,我已经尝试了所有可能的方法来聚焦这个领域,但似乎没有一种有效。有什么建议吗?我认为您的问题可能是您的“send”方法执行了一个异步发回到

我正在用KnockoutJS和Node.js编写一个小型聊天客户端/服务器应用程序,一切都很好,只是在我发送消息后,我失去了对消息字段的关注,用户每次想键入消息时都必须重新单击它(非常烦人)。你们知道我能做什么吗?以下是模板:


    {{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已经不存在了。我更新了小提琴。如果你看到其他人,请告诉我。