“设置间隔”是否阻止用户键入



我在我的Web应用程序中制作了聊天系统。
这是带有消息输入字段的基本聊天。

我只包装了messages_section然后我使用 setInterval 每 1 秒部分加载一次它。
然而,我在这里发现了奇怪的行为。

当我在输入字段中键入内容时,每次加载setInterval时都会以某种方式输入键入的单词。

现在看来,这只会影响使用FireFox浏览:(

我假设setInterval除非在输入字段中设置了输入字段,否则不会影响输入字段

这些是我的代码。我想知道为什么以及如何修复

jQuery

<script type="text/javascript">
//<![CDATA[
        jQuery(document).ready(function () {
            refreshPartial();
            setInterval(refreshPartial, 1000)
        });
        function refreshPartial() {
          $.ajax({
            url: "/communities/setinterval_part?page=",
            type: "GET",
            dataType: "script",
          });
        }
//]]>
</script>

.HTML

  <form accept-charset="UTF-8" action="/communities/new_comments" class="new_comment" data-remote="true" id="new_comment" method="post">
      <input class="chat" id="input" name="comment[body]" type="text" />  
      <button type="submit" class="btn">submit</button>
  <form>
  <span id="messages_section">
       here comes messages!
  </span>

setinterval_part.js.erb

$('#messages_section').html("<%= j(render(:partial => 'communities/comment')) %>");
<% if @post %>$('#body_input').val('');<% end %>

communities_controller.rb

def setinterval_part
        @comments = @community.comment_threads.order("updated_at DESC").page(params[:page]).per(@number_of_comments_to_display)
        @comment = @community.comment_threads.build
    respond_to do |format|
        format.js 
    end
end

首先,我建议你在这种情况下不要使用 setInterval。如果您的服务器需要超过 1 秒才能应答客户端怎么办?我认为您可以直接从setinterval_part.js.erb运行refreshPartial()功能.

因此,您需要在视图中对JS部分进行以下更改:

jQuery(document).ready(function () {
  refreshPartial();
});
function refreshPartial() {
  $.ajax({
    url: "/communities/setinterval_part?page=",
    type: "GET",
    dataType: "script",
  });
}

而这要setinterval_part.js.erb

$('#messages_section').html("<%= j(render(:partial => 'communities/comment')) %>");
<% if @post %>$('#body_input').val('');<% end %>
<% timeout_ms = 1000 %>
<% # some code that can determine current load of your server and increase timeout_ms %>
setTimeout(refreshPartial, <%= timeout_ms %>);

相关内容

  • 没有找到相关文章

最新更新