请查看以下代码,该代码位于_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。
答案 0 :(得分:2)
一个。有替代方法,但在$(function() {})
中包装代码是确保在将所有元素加载到DOM之前不执行代码的最佳方法之一。这是一个jQuery功能。
湾("form#new_revision").on("keypress", typeCatch);
应为$("form#new_revision").on("keypress", typeCatch);
。你在开头就错过了$
。