【发布时间】:2013-06-11 07:54:30
【问题描述】:
请看一下_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() {} 包裹它?
b.有什么我做错了吗?既然没有触发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 调用。
问题:如何防止这种情况发生? my_personal_chat.js 应该只在我转到myapp.com/chat 时加载。我是否应该从 javascript 文件中提取所有内容并将其放入 chat.html.erb 中?这是传统的做法吗?
回答我自己的问题:我将代码从my_personal_chat.js 移动到chat.js.coffee 并删除了my_personal_chat.js。现在只有当用户进入聊天页面时才会加载 javascript。
【问题讨论】:
-
你错过了来自
("form#new_revision").on("keypress", typeCatch)的$ -
又是你@FrederickCheung!非常感谢。是的,我添加了它,但问题仍然存在。另外,我不需要最后的分号吗?
-
分号在 JS 中是可选的。
-
是的,我真的应该这样做。仍在解决此问题,我将在解决此问题后立即标记为答案。
标签: javascript jquery ruby-on-rails