Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
Javascript 检查是否已触发jQuery页面加载事件_Javascript_Jquery - Fatal编程技术网

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

Javascript 检查是否已触发jQuery页面加载事件,javascript,jquery,Javascript,Jquery,有没有办法检查jQuery是否触发了页面加载事件,或者您是否必须自己启动页面加载事件?我需要改变链接的行为,但我不想等到页面加载完毕,因为可以想象,用户可以在页面加载完毕之前单击页面上半部分的链接。现在我是这样做的: var pageLoaded = false; $(function() { pageLoaded = true; }); function changeLinks() { $("a[data-set-already!='true']").each(function()

有没有办法检查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

由于您使用的是DocumentReady速记,我猜您的意思是加载dom时。为此:

$.isReady

由于您使用的是DocumentReady速记,我猜您的意思是加载dom时。为此:

$.isReady

您可以使用
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()
。直接单击()
,让jQuery执行循环。除非你的
.each()
代码中有更多你没有发布的内容

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

您可以使用
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()
。直接单击()
,让jQuery执行循环。除非你的
.each()
代码中有更多你没有发布的内容

$("a[data-set-already!='true']").attr("data-set-already", "true").click(...);
您可以使用.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中可能不存在的元素上的插件也是一种有用的技术。

您可以使用.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中可能不存在的元素的后期初始化插件,这也是一种有用的技术。

如果不想等待页面准备就绪,可以将javascript内联执行为阻止脚本。只要将该脚本放在jQuery加载的位置下方,您是否考虑过将单击事件与.live()绑定?您如何使用
changeLinks()
??在事件中?
$(document).ready(function(){})
确保加载的DOM比加载的页面快。@Tejs,没错,但我的页面有数百个链接,所以数百个内联脚本似乎并不理想。如果不想等待页面准备就绪,可以将javascript内联作为阻止脚本执行。只要将该脚本放在jQuery加载的位置下方,您是否考虑过将单击事件与.live()绑定?您如何使用
changeLinks()
??在事件中?
$(document).ready(function(){})
确保加载的DOM比加载的页面快。@Tejs,没错,但我的页面有数百个链接,因此数百个内联脚本似乎并不理想。我想在链接可见时立即更改链接,这可能发生在加载DOM之前。我明白了。$。一旦dom完全加载,isReady将像示例中的pageLoaded一样为真。很酷的技巧。虽然没有记录。。。这肯定会在未来的版本中继续存在吗?不确定,但它与noConflict在同一个extend语句中公开,我相信这不会消失。此外,它被公开曝光预示着它的长寿。他们可以很容易地用一个非公开的变量完成他们使用它的目的。我想在链接一出现就改变链接,这可能发生在加载dom之前。我明白了。$。一旦dom完全加载,isReady将像示例中的pageLoaded一样为真。很酷的技巧。虽然没有记录。。。这肯定会在未来的版本中继续存在吗?不确定,但它与noConflict在同一个extend语句中公开,我相信这不会消失。此外,它被公开曝光预示着它的长寿。他们可以通过一个非公开的变量轻松完成使用它的目的。你也可以将$放在live event handler中,找到同样不包含数据集的类似锚定标记,并将它们设置在那里,这对于后期将lightbox插件绑定到锚定标记是非常好的。您还可以将$。每个都放在live事件处理程序中,以找到同样不包含数据集的类似锚定标记,并将它们设置在那里,这对于后期将lightbox插件绑定到锚定标记是非常好的。