处理多个文档就绪事件侦听器

时间:2016-09-22 23:17:51

标签: javascript jquery event-listener

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

$(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如何运作的理解。

现在,这是踢球者。我需要发生的是一旦这些绑定运行(再次我只希望第一个绑定被执行,因此"你好詹姆斯"打印出我的控制台日志),我需要取消绑定准备好的文档。我在考虑做...

$(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")
});

但这不起作用。 "你好詹姆斯"将被记录,但就绪事件不会解除绑定。我在这里错过了什么吗?我做错了什么?

1 个答案:

答案 0 :(得分: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/

(我将.ready(更改为.on("ready",,否则代码片段和jsfiddle都无法生成/生成错误,但我不明白为什么。尽我所能告诉.ready(应该可以正常工作。)