在哪里放置 jquery 个文件,包括事件处理程序

Where to put jquery files including event handlers

我知道这可能很愚蠢,但一如既往地感谢您的帮助:

我有 pre.js 个包含一个事件处理程序的文件

$('#soon_tasks_header').click(function(){ $('#soon_tasks_content').slideToggle() ; })

application.js

需要
     //= require pre

点击#soon_tasks_header 不会切换滑动, 但是,将代码放在我浏览器的 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 元素出现在页面中之前不会实际执行安装事件处理程序的代码。

  1. <script> 标记实际放置在 <body> 部分的末尾。这将确保所有 DOM 元素在脚本运行之前都已被解析。

  2. 将您的代码包装在 $(document).ready() 中,这将告诉 jQuery 等待调用您的代码,直到页面已被解析并且所有 DOM 元素都在页。

如果您无法控制 <script> 标签的位置,或者由于您的环境而很难将所有 <script> 标签放在 <body> 标签的末尾,那么你可以像这样使用 $(document).ready():

$(document).ready(function() {
    $('#soon_tasks_header').click(function(){ 
        $('#soon_tasks_content').slideToggle() ;
    })
});

而且,只要 jQuery 已经首先加载,无论您在何处包含脚本标签,这都将起作用。