检查jQuery页面是否已加载事件

时间:2011-09-20 19:11:35

标签: javascript jquery

有没有办法检查jQuery是否已经触发了页面加载事件,还是你必须自己动手?我需要改变链接的行为,但我不想等到页面完成加载,因为用户可以想象在页面完成加载之前单击页面上半部分上的链接。现在我这样做:

var pageLoaded = false;
$(function() {
  pageLoaded = true;
});

function changeLinks() {
  $("a[data-set-already!='true']").each(function() {
    $(this).attr("data-set-already", "true").click(...);
  }); 
  // Is there something along the lines of jQuery.pageWasLoaded that I can
  // use instead?
  if (!pageLoaded) {
    window.setTimeout(changeLinks, 100);
  }
}
changeLinks(); // Added per @jondavidjohn's question

3 个答案:

答案 0 :(得分:4)

由于您正在使用文档就绪速记,我猜您的意思是在加载dom时。为此:

$.isReady

答案 1 :(得分:1)

您可以使用setInterval并清除domready上的间隔:

var changeLinksInterval = setInterval(function () {
    $("a[data-set-already!='true']").each(function() {
        $(this).attr("data-set-already", "true").click(...);
    });
}, 100);
$(function () {
    clearInterval(changeLinksInterval);
});

顺便说一下,在您的代码示例中,您不应该需要.each() - 您应该能够直接调用.attr().click()并让jQuery执行循环。除非您的.each()代码中有更多内容未发布。

$("a[data-set-already!='true']").attr("data-set-already", "true").click(...);

答案 2 :(得分:1)

您可以使用.live()来启动点击事件,在绑定时需要额外的工作。

$("a[data-set-already!='true']").live(function(){
  // since this event will only fire once per anchor tag, you
  // can safely bind click events within it without worrying
  // about getting duplicate bound click events.
  var $this = $(this);
  $this
    .data("dataSetAlready",true)
    .click(myClickHandler);
});

这对于在domReady中可能不存在的元素的后期初始化插件也是一种有用的技术。