2016-09-22 77 views
0

我的代码中有多个文档就绪事件侦听器。处理多个文档就绪事件侦听器

$(document).ready(function() { 
    console.log("hello james") 
}); 

$(document).ready(function() { 
    console.log("hello cindy") 
}); 


$(document).ready(function() { 
    console.log("hello dave") 
}); 

我只想在用户访问该页面时准备打电话给第一个文档。我不需要其他两个文件准备就绪。

我不能使用全局变量来检查这个。我希望能做的是使用bind。我的理论是通过设置代码...

$(document).bind("ready", function() { 
    console.log("hello james") 
}); 

$(document).bind("ready", function() { 
    console.log("hello cindy") 
}); 


$(document).bind("ready", function() { 
    console.log("hello dave") 
}); 

只有第一个绑定会调用。这是我目前对bind工作原理的理解。

现在,这里是踢球者。我需要发生的是一旦这些绑定运行(我只希望第一个绑定被执行,因此“hello james”在我的控制台日志中打印出来),我需要解除绑定准备好的文档。我正在考虑做...

$(document).bind("ready", function() { 
    console.log("hello james") 
    $(document).unbind("ready"); 
}); 

$(document).bind("ready", function() { 
    console.log("hello cindy") 
}); 


$(document).bind("ready", function() { 
    console.log("hello dave") 
}); 

但是,这并不起作用。 “你好詹姆斯”将被记录,但准备好的事件不会解除绑定。我在这里错过了什么吗?我究竟做错了什么?

+0

根本不应该这样做,如果这是解决某个问题的唯一方法,那么就会有严重的缺陷。 – adeneo

+0

为什么你需要这样的3个功能?一种解决方案是只有一个'$(document).ready'函数,并从其中调用另外两个函数 – Howzieky

+0

感谢您向我介绍“bind()”,但您的理解似乎与https:/ /developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind – racraman

回答

0

您可以试试event.stopImmediatePropagation()
这防止执行绑定到相同的事件的任何其他处理程序:

$(document).on("ready",function(e) { 
 
    e.stopImmediatePropagation(); 
 
    console.log("hello james"); 
 
}); 
 
$(document).on("ready",function(){console.log("hello cindy");}); 
 
$(document).on("ready",function(){console.log("hello dave");});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
的jsfiddle:https://jsfiddle.net/L6j23hao/2/

(I改变.ready(.on("ready",因为否则代码段和两个jsfiddle不会工作/产生一个错误,但我不明白为什么。据我所知.ready(应该工作得很好。)