完成页面加载后执行函数

时间:2012-08-13 14:52:17

标签: javascript html image

我在页面加载后使用以下代码执行一些语句。

 <script type="text/javascript">
    window.onload = function () { 

        newInvite();
        document.ag.src="b.jpg";
    }
</script>

但是这段代码不能正常工作。即使正在加载某些图像或元素,也会调用该函数。我想要的是调用该函数完全加载页面。

18 个答案:

答案 0 :(得分:128)

这可能适合你:

document.addEventListener('DOMContentLoaded', function() {
   // your code here
}, false);

或 如果你对jquery的安慰,

$(document).ready(function(){
// your code
});

$(document).ready()会触发DOMContentLoaded,但此事件不会在浏览器中一致地触发。这就是jQuery最有可能实现一些重要的解决方法来支持所有浏览器的原因。这将使得使用普通Javascript“完全”模拟行为变得非常困难(但当然并非不可能)。

正如Jeffrey Sweeney和J Torres建议的那样,我认为在解雇下面的函数之前,最好有一个setTimeout函数:

setTimeout(function(){
 //your code here
}, 3000);

答案 1 :(得分:30)

如果您可以使用jQuery,请查看load。然后,您可以将元素设置为在元素完成加载后运行。

例如,考虑一个包含简单图像的页面:

<img src="book.png" alt="Book" id="book" />

事件处理程序可以绑定到图像:

$('#book').load(function() {
  // Handler for .load() called.
});

如果您需要加载当前窗口中的所有元素,可以使用

$(window).load(function () {
  // run code
});

答案 2 :(得分:27)

A)使用普通javascript

document.addEventListener('readystatechange', event => {

    if (event.target.readyState === "interactive") {      //same as:  document.addEventListener("DOMContentLoaded"...   // same as  jQuery.ready
        alert("All HTML DOM elements are accessible");
    }

    if (event.target.readyState === "complete") {
        alert("Now external resources are loaded too, like css,src etc... ");
    }

});

B)使用 jQuery

$(function(){
    alert("hello");
});

C)请勿使用以下方法(使用=标志)

document.onreadystatechange = function(){ alert("Hi"); }

因为它会覆盖其他同类声明。

答案 3 :(得分:18)

我有点混淆你完成页面加载意味着什么,&#34; DOM加载&#34;或&#34;内容加载&#34;还有?在html页面中,load可以在两个类型事件之后触发事件。

  1. DOM加载:确保整个DOM树加载开始结束。但不能确保加载参考内容。假设您按img标记添加了图像,因此此事件可确保加载所有document.addEventListener('DOMContentLoaded', function() { // your code here }, false); 但未正确加载图像。要获得此活动,您应该写下以下方式:

    $(document).ready(function(){
    // your code
    });
    

    或者使用jQuery:

    img
  2. 在DOM和内容加载之后:这也表示DOM和内容加载。它不仅可以确保window.addEventListener('load', function() {...}) 标记,还可以确保加载所有图像或其他相关内容。要获得此活动,您应该写下以下方式:

    $(window).on('load', function() {
     console.log('All assets are loaded')
    })
    

    或者使用jQuery:

     upload(event) {
                this.loading = true;
                let file = event.srcElement.files[0];
                this.uploader.upload(file).then(x => {
                    console.log(x);
                 this.loading = false;
                });
                console.log(this.config);
            }
    

答案 4 :(得分:10)

如果您想在html页面中调用js函数,请使用onload事件。当用户代理完成加载窗口或FRAMESET中的所有帧时,会发生onload事件。此属性可以与BODY和FRAMESET元素一起使用。

<body onload="callFunction();">
....
</body>

答案 5 :(得分:6)

通过这种方式,您可以处理这两种情况 - 如果页面已经加载:

main_array = [
  {:amount=>897500,  :gross_amount=>897500,  :tax=>147500, :hotel_fees=>0, :base_fare=>750000, :currency=>"INR"}, 
  {:amount=>1006500, :gross_amount=>1006500, :tax=>156500, :hotel_fees=>0, :base_fare=>850000, :currency=>"INR"},
  {:amount=>1006500, :gross_amount=>1006500, :tax=>156500, :hotel_fees=>0, :base_fare=>850000, :currency=>"INR"},
]
array_result = main_array.flat_map(&:to_a).group_by(&:first).map do |key, array| 
  { 
    key => (
      result = array.inject(0) do |total, (_, value)| 
        value.is_a?(Fixnum) ? total + value : value
      end 
      result.is_a?(Fixnum) ? result / main_array.size : result 
    ) 
  } 
end
p array_result

答案 6 :(得分:1)

如果您没有使用任何JS框架,那么这个项目是获得dom就绪状态的最佳方式,具有跨浏览器兼容性

https://github.com/ded/domready/blob/master/ready.js

答案 7 :(得分:1)

如果您已经在使用jQuery,可以试试这个:

for i = 1:m
[image] = imread(imageFile{i});
[x y]=size(image);
Vector=reshape(image,1,x*y);
matrix=[matrix;Vector];

end

答案 8 :(得分:1)

或者,您也可以在下面尝试。

$(window).bind("load", function() { 
// code here });

这在所有情况下都有效。仅在加载整个页面时才会触发。

答案 9 :(得分:1)

  Select ActivityName from dbo.StudentActivity Order by ListOrder asc

答案 10 :(得分:1)

我可以告诉你,我找到的最佳答案是放一个&#34;驱动程序&#34;在</body>命令之后的脚本。它比上面的一些解决方案更容易,也可能更普遍。

计划:在我的页面上是一张桌子。我将带有表格的页面写入浏览器,然后用JS对其进行排序。用户可以通过单击列标题来使用它。

在表结束</tbody>命令后,正文结束,我使用以下行调用排序JS按列3对表进行排序。我从网上获取了排序脚本这里没有转载。至少在明年,你可以在static29.ILikeTheInternet.com看到这个,包括JS。点击&#34;在这里&#34;在页面的底部。这将带来另一个包含表格和脚本的页面。您可以看到它提取数据然后快速排序。我需要加快一点速度,但现在基础已经存在。

</tbody></body><script type='text/javascript'>sortNum(3);</script></html>

MakerMikey

答案 11 :(得分:0)

您可以不使用jquery就这样尝试

window.addEventListener("load", afterLoaded,false);
function afterLoaded(){
alert("after load")
}

答案 12 :(得分:0)

我倾向于使用以下模式来检查文档是否完成加载。该函数返回一个Promise(如果您需要支持IE,请包含polyfill),该文档将在文档完成加载后解析。它在下面使用setInterval,因为使用setTimeout的类似实现可能会导致非常深的堆栈。

function getDocReadyPromise()
{
  function promiseDocReady(resolve)
  {
    function checkDocReady()
    {
      if (document.readyState === "complete")
      {
        clearInterval(intervalDocReady);
        resolve();
      }
    }
    var intervalDocReady = setInterval(checkDocReady, 10);
  }
  return new Promise(promiseDocReady);
}

当然,如果您不必支持IE:

const getDocReadyPromise = () =>
{
  const promiseDocReady = (resolve) =>
  {
    const checkDocReady = () =>
      ((document.readyState === "complete") && (clearInterval(intervalDocReady) || resolve()));
    let intervalDocReady = setInterval(checkDocReady, 10);
  }
  return new Promise(promiseDocReady);
}

使用该功能,您可以执行以下操作:

getDocReadyPromise().then(whatIveBeenWaitingToDo);

答案 13 :(得分:0)

据我所知,您最好打赌

window.addEventListener('load', function() {
    console.log('All assets loaded')
});

使用DOMContentLoaded事件的第一个答案是后退一步,因为DOM将在所有资产加载之前加载。

其他答案推荐setTimeout,我强烈反对,因为它完全取决于客户端的设备性能和网络连接速度。如果某人的网络速度较慢和/或cpu速度较慢,则页面加载可能需要几到数十秒的时间,因此您无法预测setTimeout需要多少时间。

对于readystatechange,只要readyState发生更改(根据MDN仍将在load事件之前),它将触发。

  

完成

     

状态指示加载事件即将触发。

答案 14 :(得分:0)

在完成页面加载设置超时后调用函数

&#13;
&#13;
setTimeout(function() {
   var val = $('.GridStyle tr:nth-child(2) td:nth-child(4)').text();
	for(var i, j = 0; i = ddl2.options[j]; j++) {
		if(i.text == val) {      
			ddl2.selectedIndex = i.index;
			break;
		}
	} 
}, 1000);
&#13;
&#13;
&#13;

答案 15 :(得分:0)

试试这个jQuery

$(function() {
 // Handler for .ready() called.
});

答案 16 :(得分:-1)

我使用网络组件对我有用:

document.addEventListener('WebComponentsReady', function() {
       document.querySelector('your-element').show();
});

答案 17 :(得分:-3)

在完成body标签后放置脚本......它可以正常工作......