2015-08-16 39 views
1

在某网页上我的网站,jQuery的。就绪(被解雇,即使它不应该jQuery的。就绪)元素()发射事件不存在

代码:

var home = ["index", "about"]; 
    _.each(home, function(page) { 
     $("body.home." + page).ready(function() { 
      //DO SOMETHING HERE 
     }); 
    }); 

    <html> 
    <body class='test'> 
    //ALOT OF CONTENT HERE 
    </body> 
    </html> 

问题是,//做点什么这里是射击两次,即使初始化。就绪时()事件,他们是在非现有元素

我缺少什么初始化?

+0

号他们开火两次,因为你有两页。 –

+0

@ l19,$(“body.home。”+ page).length等于0,那么.ready()怎么会激发? – Alon

+1

'.ready()'在'document'准备就绪时触发,而不是在单个元素准备就绪时触发。你在你的'_.each()'循环中注册了两个'.ready()'处理程序,这样当'document'准备就绪时,每个处理程序都会被调用。在'.ready()'调用中使用的选择器将被忽略。 '.ready()'总是适用于文档。 – jfriend00

回答

4

你有两个元素的数组:

var home = ["index", "about"]; 

和每个2:

_.each(home, function) 

你正在运行的功能:

function(page) { 
    $("body.home." + page).ready(function() { 
     //DO SOMETHING HERE 
    }); 
} 

$().ready()是听众,你每页设置一次。所以它会发射两次。

$().ready()函数不需要选择器,但建议使用$(document).ready()。有关更多详细信息,请参阅http://api.jquery.com/ready

+0

但是选择器在它们两个上都返回0,所以.ready()如何激发? – Alon

+1

'$()。ready()'函数不需要选择器。请参阅https://api.jquery.com/ready/ – rrowland

+0

,因此编写$(“body.home.index”)。ready(处理程序)不正确?当页面中的元素不存在时它会触发? – Alon

0

要初始化有两个元素的数组:var home = ["index", "about"];

对于这两种元素,jQuery的ready(handler)功能在您的_.each循环执行。 jQuery ready(handler)处理函数在页面加载成功后执行(请参阅https://api.jquery.com/ready/上的jQuery文档),这会导致您的处理函数被执行两次。

+0

虽然.ready()只会在元素存在并准备就绪时触发 – Alon

0

试试这个

var home = ["index", "about"]; 
    _.each(home, function(page) { 
     if($("body.home." + page)){ 
     $("body.home." + page).ready(function() { 
      //DO SOMETHING HERE 
     }); 
     } 
    }); 
相关问题