有没有办法检查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
答案 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中可能不存在的元素的后期初始化插件也是一种有用的技术。