我在页面加载后使用以下代码执行一些语句。
<script type="text/javascript">
window.onload = function () {
newInvite();
document.ag.src="b.jpg";
}
</script>
但是这段代码不能正常工作。即使正在加载某些图像或元素,也会调用该函数。我想要的是调用该函数完全加载页面。
答案 0 :(得分:128)
这可能适合你:
document.addEventListener('DOMContentLoaded', function() {
// your code here
}, false);
或 如果你对jquery的安慰,
$(document).ready(function(){
// your code
});
$(document).ready()
会触发DOMContentLoaded,但此事件不会在浏览器中一致地触发。这就是jQuery最有可能实现一些重要的解决方法来支持所有浏览器的原因。这将使得使用普通Javascript“完全”模拟行为变得非常困难(但当然并非不可能)。
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可以在两个类型事件之后触发事件。
DOM加载:确保整个DOM树加载开始结束。但不能确保加载参考内容。假设您按img
标记添加了图像,因此此事件可确保加载所有document.addEventListener('DOMContentLoaded', function() {
// your code here
}, false);
但未正确加载图像。要获得此活动,您应该写下以下方式:
$(document).ready(function(){
// your code
});
或者使用jQuery:
img
在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就绪状态的最佳方式,具有跨浏览器兼容性
答案 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)
在完成页面加载设置超时后调用函数
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;
答案 15 :(得分:0)
试试这个jQuery:
$(function() {
// Handler for .ready() called.
});
答案 16 :(得分:-1)
我使用网络组件对我有用:
document.addEventListener('WebComponentsReady', function() {
document.querySelector('your-element').show();
});
答案 17 :(得分:-3)
在完成body标签后放置脚本......它可以正常工作......