关于javascript的基本问题

时间:2013-06-11 07:54:30

标签: javascript jquery ruby-on-rails

请查看以下代码,该代码位于_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请求并更新读者列表。但是,当我开始在表单中键入并且我正在尝试调试此问题时,不会触发post请求。

由于我对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时,都会调用对POST /pusher/auth的ajax调用。

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

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

回答我自己的问题:我将代码从my_personal_chat.js移至chat.js.coffee并删除了my_personal_chat.js。现在只有当用户进入聊天页面时才会加载javascript。

1 个答案:

答案 0 :(得分:2)

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

("form#new_revision").on("keypress", typeCatch);应为$("form#new_revision").on("keypress", typeCatch);。你在开头就错过了$