Onload方法在连续重新加载到应用程序时多次调用自身(var image=new image(),javascript问题)
我不明白为什么onload方法(见下面的代码)在IE8和IE9浏览器中连续重载时多次调用自己 我猜,onload方法触发了多次,导致该图像在IE8、IE9中多次渲染(显示)。下面的js代码是我的前辈Front Ender编写的(他使用自己编写的js库处理所有Onload方法在连续重新加载到应用程序时多次调用自身(var image=new image(),javascript问题),javascript,image,internet-explorer-8,internet-explorer-9,Javascript,Image,Internet Explorer 8,Internet Explorer 9,我不明白为什么onload方法(见下面的代码)在IE8和IE9浏览器中连续重载时多次调用自己 我猜,onload方法触发了多次,导致该图像在IE8、IE9中多次渲染(显示)。下面的js代码是我的前辈Front Ender编写的(他使用自己编写的js库处理所有.append(),anim(),…方法)。该代码在Firefox、Chrome中正常工作,但在使用IE8或IE9浏览器重新加载时,图像(html代码)呈现了不止一次 一些快速信息: waitingFor()-定期扫描dom以查找匹配的元素
.append()
,anim()
,…方法)。该代码在Firefox、Chrome中正常工作,但在使用IE8或IE9浏览器重新加载时,图像(html代码)
呈现了不止一次
一些快速信息:
-定期扫描dom以查找匹配的元素waitingFor()
-出现多次的图像mdiTog
div
属性Class=“suggestions ContextSuggestions”
插入到主体
元素中,并包含一个无序列表(ul
,li
,ul
),如果单击图像(mdiTog
),该列表将在不透明度0
和1
之间切换
以下是Mditog
多次出现的图像,其外观是随机的:
waitingFor('.viewport.homePage',函数(){
var mdiTog=新图像();
mdiTog.onload=函数(){
变量$mdi=M$('.mdi'),
$contextMenu=M$($body.append(“”)),
$toggle=M$($mdi.append('),
可见=假,
主动=假;
var hideCtx=函数(){
如果(可见){
$contextMenu.anim(“”,{opacity:100},{opacity:0},250,函数(){
$contextMenu.css({display:'none'});
});
可见=假;
}
};
$toggle.css({opacity:0,display:'inline block'}).anim('',{opacity:0},{opacity:100},1000).on('click',function(){
var togOS=$toggle.offset(),
菜单=“”;
M$('li',$mdi.get())。每个(函数(el,idx){
如果(idx>1){
menu+=''+$mdi.text(null,el)+' ';
}
});
$contextMenu.css({opacity:0,display'block',top:togOS.top+'px',left:(togOS.left-20)+'px'}).anim('',{opacity:0},{opacity:100},400,函数(){
可见=真实;
}).html(“”+菜单+”- “+translate('previewAll')+”
- ”+translate('closeAll')+”
);
});
$contextMenu.on('click',函数(e){
var target=$contextMenu.eventTarget(e);
if(target.tagName=='LI'&&target.className.indexOf('uiUtil')==-1){
$contextMenu.fire('click',M$('.mditabli').get(parseInt(target.getAttribute('rel'),10));
}
hideCtx();
}).on('mouseleave',函数(){
主动=假;
}).on('mouseenter',函数(){
主动=真;
});
setInterval(函数(){
如果(!活动&可见){
hideCtx();
}
}, 1000);
};
mdiTog.src='media/img/ico_16_context.png';
});
我必须尽快解决此问题,因此,欢迎在此代码中提出任何建议/修改/添加内容,以强制onload仅在IE8/IE9浏览器中执行一次,即使是在多次连续重新加载时也是如此。如果onload触发两次,则应防止多次执行处理程序:
var mdiTog = new Image();
var hasFired = false;
mdiTog.onload = function () {
if (hasFired)
return;
hasFired = true;
…
};
或者,如果您正在使用类似jQuery的库,可以尝试one
事件绑定方法:
var mdiTog = new Image();
M$(mdiTog).one("load", function () {
…
});
感谢编辑Wouter J,我下次提问时会记住这些事情,但是没有render(调用)方法-它应该出现在网页上/呈现在网页上,所以做了更改,因为这会让读者感到困惑。因此,
onload
有时会触发两次?请缩小这个问题的范围。另外,您正在使用jQuery吗?是的,您可以这样说,正如我使用开发人员工具检查的那样,图像和HTML代码出现了不止一次。此外,我没有使用jquery,这段代码是由我的高级开发人员编写的,他使用了手工编制的MkiScript-javascript库。谢谢你的建议,我想onload函数已经启动了不止一次了。?然而,所有这些M$
功能似乎都像jQuery.yup一样工作,它相当于jQuery中的$
,甚至大多数函数都像jQuery一样工作,但Mkiscript是3kb的小型化,而且速度相当快……)感谢Bergi的回答,首先我将在周一实施,然后只接受答案:)