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