将jquery文件(包括事件处理程序)放在何处
我知道这可能很愚蠢,但一如既往地,帮助是值得感激的: 我有一个包含一个事件处理程序的pre.js文件将jquery文件(包括事件处理程序)放在何处,jquery,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,ruby-on-rails-3.2,Jquery,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Ruby On Rails 3.2,我知道这可能很愚蠢,但一如既往地,帮助是值得感激的: 我有一个包含一个事件处理程序的pre.js文件 $('soon_tasks_header')。单击(函数(){ $('soon#u tasks_content')。slideToggle(); }) 在application.js中是必需的 //= require pre 单击#soon_tasks_标题不会切换它, 但是,将代码放在浏览器的jQuery控制台中就可以了 注: 当我在pre.js文件中测试时,它运行良好: $(do
$('soon_tasks_header')。单击(函数(){
$('soon#u tasks_content')。slideToggle();
})
在application.js中是必需的
//= require pre
单击#soon_tasks_标题不会切换它,
但是,将代码放在浏览器的jQuery控制台中就可以了
注:
当我在pre.js文件中测试时,它运行良好:
$(document).ready(function(){
alert('aaaa') })
我想我搞乱了一些基本的东西,那就是导入jquery文件,何时何地
$(document).ready(function(){
$('#soon_tasks_header').click(function(){
$('#soon_tasks_content').slideToggle() ;
});
})
而且效果很好。
谢谢。这里需要了解的重要一点是,在页面中出现DOM元素之前,无法安装DOM元素上的事件处理程序。如果在页面加载器解析页面的该部分之前过早地尝试安装它们,那么jQuery将无法在页面中找到任何匹配的元素,并且不会附加任何事件处理程序 有多种方法可以确保安装事件处理程序的代码在DOM元素出现在页面中之前不会实际执行
标记实际放置在
部分的末尾。这将确保在脚本运行之前已解析所有DOM元素$(document).ready()
中,这将告诉jQuery等待调用代码,直到页面被解析并且所有DOM元素都在页面中
标记的位置,或者由于您的环境原因,将所有
标记放置在
标记的末尾很复杂,那么您可以像这样使用$(document).ready()
:
$(document).ready(function() {
$('#soon_tasks_header').click(function(){
$('#soon_tasks_content').slideToggle() ;
})
});
而且,只要jQuery已经首先加载,无论您在哪里包含脚本标记,这都会起作用。在呈现内容时,我丢失了slideToggle功能,这意味着不再调用$(document).ready(),因此我想我将采用放置标记的解决方案。我不知道为什么我觉得这是一个坏习惯,最好将所有脚本放在一个jquery文件中,这样就不需要再次调用它们了。@KamalG'ool-任何时候重新创建
#soon#u tasks_header
对象时,上一个对象上的任何事件处理程序都将丢失。对于动态创建的内容,可以使用委托事件处理,将事件处理程序附加到静态父级,该父级侦听其子级上的事件。可以动态创建或重新创建子级,委派的事件处理程序将继续工作。更多解释请参见。@KamalG'ool-这回答了你的问题吗?如果是这样,请勾选答案左侧的绿色复选标记,以向社区表明您的问题现在已经得到了回答,并为自己按照正确的程序赢得一些声誉分数。如果这没有回答您的问题,那么请评论它仍然缺少什么,以便可以编辑答案以完成它。