关于javascript的基本问题

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

  function typeCatch(){ $.post(""); $(this).off("keypress", typeCatch);//remove handler } $(function(){ ("form#new_revision").on("keypress", typeCatch); });  

当用户开始键入表单时,应触发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实现聊天function的方法。 由于通道是私有的,每次调用var channel ,都会调用对POST /pusher/auth的ajax调用。

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

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

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

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

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