Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将jquery文件(包括事件处理程序)放在何处_Jquery_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 4_Ruby On Rails 3.2 - Fatal编程技术网

将jquery文件(包括事件处理程序)放在何处

将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

我知道这可能很愚蠢,但一如既往地,帮助是值得感激的:

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

$('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-这回答了你的问题吗?如果是这样,请勾选答案左侧的绿色复选标记,以向社区表明您的问题现在已经得到了回答,并为自己按照正确的程序赢得一些声誉分数。如果这没有回答您的问题,那么请评论它仍然缺少什么,以便可以编辑答案以完成它。