0

请查看以下代码,该代码位于_form.html.erb

<script>
    function typeCatch(){
      $.post("<%= update_readers_link_essay_path(@essay) %>");
      $(this).off("keypress", typeCatch);//remove handler
     }

  $(function(){
    ("form#new_revision").on("keypress", typeCatch);
  });
</script>

当用户开始输入表单时,应该触发 ajax 请求并更新读者列表。但是,当我开始输入表单并尝试调试此问题时,不会触发发布请求。

由于我对 javacsript 还不是很熟悉,如果您能帮助我澄清一些事情,我将不胜感激。

一个。对于第二部分,我可以做吗

$("form#new_revision").on("keypress", typeCatch);

不用包裹它$(function() {}

湾。有什么我做错了吗?由于没有触发ajax调用,我一定在第二部分犯了错误?

附加问题

my_personal_chat.js(在 app/assets/javascripts 管道中)

$(function() {
  var pusher = new Pusher('app_key');
  var channel = pusher.subscribe('presence-my-chat');

  channel.bind('pusher:subscription_succeeded', function(members) {
    $('#online_users').empty();
    members.each(function(member){
        addMember(member);
    });
... other functions ...
});

这就是我使用 Pusher 实现聊天功能的方式。由于通道是私有的,所以每次我调用var channel时,都会调用一个 ajaxPOST /pusher/auth调用。

我发现每次导航到不同的页面时,即使它不在聊天功能所在的位置,POST /pusher/auth也会被调用。基本上,每次my_personal_chat.js加载时,都会不必要地调用 ajax 调用。

问题:如何防止这种情况发生?my_personal_chat.js 应该只在我转到myapp.com/chat. 我应该从 javascript 文件中提取所有内容并将其放入其中chat.html.erb吗?这是传统的做法吗?

回答我自己的问题:我将代码从my_personal_chat.jstochat.js.coffee和 deleted移动my_personal_chat.js。现在只有当用户进入聊天页面时才会加载 javascript。

4

1 回答 1

2

一个。有替代方案,但是将代码包装在$(function() {})其中是确保在所有元素都加载到 DOM 之前不会执行代码的最佳方法之一。这是一个 jQuery 功能。

湾。("form#new_revision").on("keypress", typeCatch);应该是$("form#new_revision").on("keypress", typeCatch);。你$一开始就错过了。

于 2013-06-11T07:59:36.017 回答