Jos*_*ose 12 javascript node.js knockout.js
我正在用KnockoutJS和Node.js编写一个小型聊天客户端/服务器应用程序,一切都很好,除了事实,在我发送消息后,我失去了对消息字段的关注,用户每次都必须重新点击它想打字(非常讨厌).你们知道我能做什么吗?这是模板:
<script type="text/html" id="chatRoom">
<div id="chatContainer" class="chatContainer">
<div class="chatFrom">
<i id="chatClose" class="chatSprite chatClose" data-bind='click: function() { server.removeChat(this) }'></i>
</div>
<div class="chatMessages">
<ul id="chatHolder">
{{each messages()}}
<li><div class="chatFromText">From: ${ from }</div>
<div class="chatTime">${ time }</div><div class="chatMsg">${ text }</div></li>
{{/each}}
</ul>
</div>
<div class="chatControls">
<form data-bind="submit: function() { send($('#'+channel).val()); $('#'+channel).focus(); }">
<input type="text" id="${ channel }" name="message" class="chatText" style="color: #999;" value="Message Here" data-bind='click: function() {
$("#"+channel).val("").css("color", "#000");
}' />
<i class="chatSprite chatSend" data-bind="click: function() { $('.chatSend').parent().submit() }"></i>
</form>
</div>
</div>
</script>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经尝试了一切可能的方法来聚焦这个领域,但似乎都没有效果.有什么建议?
RP *_*yer 12
我认为您的问题可能是您的"发送"方法将异步回发送回服务器,在成功回调中它可能会将消息推送到您的消息observableArray.发生这种情况时,您的模板将重新渲染,您的焦点将丢失.因此,这会在您的$('#'+channel).focus()
调用之后发生,因为发送是异步完成的.
没有看到你的发送功能就无法确定.
一种选择是将"channel"作为另一个参数传递给"send"函数,然后在将消息推送到消息后成功回调AJAX请求observableArray根据通道设置焦点.
此处示例:http://jsfiddle.net/rniemeyer/h2A6p/
归档时间: |
|
查看次数: |
6565 次 |
最近记录: |