在哪里放置包含事件处理程序的jquery文件

时间:2016-03-26 22:41:05

标签: jquery ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

我知道这可能是愚蠢的,但一如既往的帮助是值得赞赏的:

我有包含一个事件处理程序的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文件的地方和时间。

2 个答案:

答案 0 :(得分:0)

我把它放在里面

$(document).ready(function(){

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

它工作正常。 感谢。

答案 1 :(得分:0)

这里要理解的重要一点是,在页面中存在DOM元素之前,不能安装DOM元素上的事件处理程序。如果您尝试在页面加载器解析页面部分之前过早安装它们,那么jQuery将不会在页面中找到任何匹配的元素,并且不会附加任何事件处理程序。

有多种方法可以确保在页面中存在DOM元素之前,实际上不会执行安装事件处理程序的代码。

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

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

  3. 如果您无法控制<script>代码的位置,或者由于您的环境而将<script>标记放在<body>标记的末尾会很复杂,那么您可以像这样使用$(document).ready()

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

    而且,只要首先加载了jQuery,无论你在哪里包含脚本标记,这都会有效。