我正在使用Simile来绘制动态时间线。我还使用了一个内部库来添加评论博客。我们的内部库使用body元素的onload事件进行初始化。
<body onload="initComments('myID')">但是Simile似乎为了自己的目的劫持了onload,这样initComments('myID')就永远不会执行了。
如果不改变Simile代码,我怎么才能让我的初始化器运行?
我不希望仅仅为了解决这个问题而添加另一个库(即jQuery)。
发布于 2009-11-10 05:37:40
使用jQuery的$(document).ready事件,它允许您添加任意数量的处理程序(与onload不同)。
发布于 2009-11-10 05:42:19
首先,作为一般规则,您不希望将JavaScript作为标记属性嵌入到HTML中。
其次,Simile可能会覆盖onload (与您使用它的方式相同)。因此,您需要在包含Simile之后添加onload事件。
使用jQuery:
<script src="/js/blah/simile.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
initComments('myID');
});
</script>不使用库(找到here):
<script src="/js/blah/simile.js" type="text/javascript"></script>
<script type="text/javascript">
function addOnloadEvent(fnc){
if ( window.addEventListener ) {
window.addEventListener( "load", fnc, false );
} else if ( window.attachEvent ) {
window.attachEvent( "onload", fnc );
}
else {
var oldOnload = window.onload || function() {};
window.onload = function(e) {
oldOnload(e);
window[fnc](e);
};
}
}
addOnloadEvent(function() { initComments('myID'); });
</script>发布于 2009-11-10 05:39:44
除了前面提到的jQuery解决方案(我强烈推荐使用它,它很棒),下面是普通的JS解决方案(因为您在问题中没有提到任何关于jQuery的内容):
// Add this to top of your script.
window.onload = function () {
for (var i = 0; arguments.callee.functions.length > i; i++) {
arguments.callee.functions[i]();
}
};
window.onload.functions = [];
// Now for every onload function you want to add, do:
window.onload.functions.push(initComments('myID'));https://stackoverflow.com/questions/1704010
复制相似问题