Javascript:js在事件加载时不执行

Javascript:js在事件加载时不执行,javascript,html,javascript-events,addeventlistener,Javascript,Html,Javascript Events,Addeventlistener,我对一个脚本有一个问题,该脚本必须使用事件执行。这是我的密码: <html> <head> <script type="text/javascript" language="text/javascript"> function isinview(obj) { var curleft= 0; var viewed=0; var curtop=0; if (obj.offsetParent) { d

我对一个脚本有一个问题,该脚本必须使用事件执行。这是我的密码:

<html>
<head>
   <script  type="text/javascript" language="text/javascript">
    function isinview(obj) {
    var curleft= 0;
    var viewed=0;
    var curtop=0;
    if (obj.offsetParent) {

        do {
               curleft += obj.offsetLeft;
               curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    scroll=document.body.scrollTop;
    screenwidth=window.innerWidth;
    screenheight=window.innerHeight;
    if (screenheight+scroll>curtop){
        var script= document.createElement('script');
        script.type= 'text/javascript';
        script.src= 'http://ib.adnxs.com/ttj?id=1531490';
        document.getElementById("123").appendChild(script);
        viewed=1;
    }
}

</script>
</head>
<body>
<div align="center" id="123" onscroll="isinview(this);">pippo
</div>
<script language="javascript">
window.addEventListener("load", function(e){isinview(document.getElementById("123")); },"false");
</script>
</body>   

功能isinview(obj){
var-curleft=0;
var=0;
var-curtop=0;
if(对象抵销父对象){
做{
curleft+=obj.offsetLeft;
curtop+=对象偏移量;
}而(对象=对象抵销母公司);
}
scroll=document.body.scrollTop;
screenwidth=window.innerWidth;
屏幕高度=window.innerHeight;
如果(屏幕高度+滚动>缩短){
var script=document.createElement('script');
script.type='text/javascript';
script.src=http://ib.adnxs.com/ttj?id=1531490';
document.getElementById(“123”).appendChild(脚本);
浏览量=1;
}
}
皮波
addEventListener(“加载”,函数(e){isinview(document.getElementById(“123”);},“false”);
为什么页面在事件加载时不执行脚本?我完全不理解

谢谢


Alessio

使用jQuery,如下所示:

$(document).ready(function(){ isinview($("#123")); });

这在本地对我有效——您可以使用
console.log
或内联
警报进行验证。一个可能的问题是,您命名的元素id为
123
——CSS id不能以数字开头。您希望它做什么?

您正在使用哪个浏览器?旧版本的IE需要
window.attachEvent
而不是
window.addEventListener
脚本已加载,但js尚未执行。这就是问题所在。所以基本上你是说你真的希望文件中的脚本代码运行?也许值得在你的问题中澄清这一点。简化:假设我要运行的脚本是一个简单的函数,如:function exec(){console.log(“executed”);}我必须在我的页面内调用函数exec吗?是的,如果函数在外部脚本中没有引用或不是匿名的,脚本所要做的就是声明它不执行它。如果您可以访问外部脚本,请尝试将其更改为以下简单内容:(function(){console.log(“test”);}();对不起,我不想使用jquery。有什么理由不使用jquery吗?有很多理由不使用它,包括:它增加了一个您必须管理的依赖项,以及页面权重,对于这样一个简单的用例来说。仅仅因为你有一把漂亮的锤子并不意味着一切都是钉子@帕尔帕蒂姆:好吧,这是他的应用程序中的一个简单案例,但我相信他可以找到很多其他简单案例(在同一个应用程序中),其中jQuery可以在几乎不重要的额外页面重量下发挥作用,特别是当您不是为移动设备开发时。现在,他必须管理jQuery能够很好地管理的所有跨浏览器问题。事实上,使用jQuery有很多原因,而不是不这样做。从第一篇文章的评论来看,我认为jQuery解决不了这个问题。此外,我还想补充一点,建议某人使用jQuery并不总是最好的答案,因为OP可能会试图更好地掌握javascript本身,而无需求助于第三方库。这将大大改善他们的编码,即使他们当时确实使用jQuery。了解jQuery在幕后的作用比仅仅使用它要好,因为脚本已经加载,但js还没有执行。这就是问题所在。@AlessioG这很奇怪。你用的是哪种浏览器?我用的是chrome,我把页面放在apache上。我不在本地运行它。将
isinview()
简化为最简单的形式:一个console.log或alert语句。如果执行了,那么问题不在于事件触发,而在于函数体。看起来你在位置和可见性方面做了很多聪明的计算,所以你应该特别注意这一点。所以问题不在于函数isinview()。我试图用示例脚本替换我希望在计算机上加载的sript,但在这种情况下,它仍然没有被执行。