2009-12-23 55 views
2

我在asp.net中写过一个JS。我曾经从body onload调用过,但是JS没有调用我的调试器。这可能是什么原因?我正在开发dotnetnuke网站。body onload在Javascript中不起作用

我写的JS在语法和逻辑上都是正确的。

感谢

<script type="text/javascript"> 

var displayTime, speed, wait, banner1, banner2, link1, link2, bannerIndex, bannerLocations, bannerURLs; 

function initVar() { 
    debugger; 

    displayTime = 10; // The amount of time each banner will be displayed in seconds. 
    speed = 5; // The speed at which the banners is moved (1 - 10, anything above 5 is not recommended). 
    wait = true; 

    banner1 = document.getElementById("banner1"); 
    banner2 = document.getElementById("banner2"); 
    //link1 = document.getElementById("link1"); 
    //link2 = document.getElementById("link2"); 

    //banner1 = document.getElementById("banner1"); 
    //banner2 = document.getElementById("banner2"); 

    banner1.style.left = 0; 
    banner2.style.left = 500; 

    bannerIndex = 1; 

    /* Important: In order for this script to work properly, please make sure that the banner graphic and the 
    URL associated with it have the same index in both, the bannerLocations and bannerURLs arrays. 
    Duplicate URLs are permitted. */ 

    // Enter the location of the banner graphics in the array below. 
    //bannerLocations = new Array("internet-lg.gif","jupiterweb.gif","jupitermedia.gif"); 

    bannerLocations = new Array("image00.jpg", "image01.jpg", "image02.jpg", "admin_ban.bmp"); 

    // Enter the URL's to which the banners will link to in the array below. 
    bannerURLs = new Array("http://www.internet.com","http://www.jupiterweb.com","http://www.jupitermedia.com"); 
} 

function moveBanner() { 
    //debugger; 
    if(!wait){ 
    banner1.style.left = parseInt(banner1.style.left) - (speed * 5); 
    banner2.style.left = parseInt(banner2.style.left) - (speed * 5); 
    if(parseInt(banner1.style.left) <= -500){ 
     banner1.style.left = 500; 
     bannerIndex = (bannerIndex < (bannerLocations.length - 1)) ? ++bannerIndex :0; 
     banner1.src = bannerLocations[bannerIndex]; 
     //link1.href = bannerURLs[bannerIndex]; 
     wait = true; 
    } 
    if(parseInt(banner2.style.left) <= -500){ 
     banner2.style.left = 500; 
     bannerIndex = (bannerIndex < (bannerLocations.length - 1)) ? ++bannerIndex :0; 
     banner2.src = bannerLocations[bannerIndex]; 
     //link2.href = bannerURLs[bannerIndex]; 
     wait = true; 
    } 

    setTimeout("moveBanner()",100); 
    } else { 
     wait = false; 
     setTimeout("moveBanner()", displayTime * 1000); 
    } 
} 

</script> 

登记JS

<body onload="initVar(); moveBanner();"> 

</body> 
+1

给我们代码示例,以便我们检查您是否正确。 – johnnyArt

+1

请向我们展示一些代码,以便我们提供帮助。此外,“选择不破”http://pragprog.com/the-pragmatic-programmer/extracts/tips –

回答

3

我运行了你的代码。这两种方法都不需要我对发布的代码进行任何修改就可以执行。是否有其他代码可能会覆盖onload方法?

0

我不知道很多关于asp.net,但如果你可以在页面中把JavaScript代码,那么你可以尝试这样的选择:

window.onload = function() 
{ 
    // any code here 
} 

这与您在body tag中的内容相同。

+0

没有这不起作用在Dotnetnuke。谢谢 –

+0

谢谢你让我知道。 – Sarfraz

1

你编辑过DNN的Default.aspx吗?否则,您无法访问正文标签来添加您所展示的onload属性。

你是如何注入这个脚本的?您是否使用了文本/ HTML模块,您是否在页面中使用页眉文本设置,是将它直接添加到皮肤,是否编写了自定义模块或其他内容?

除了在body标签上使用onload属性,我建议在脚本本身中连接到该事件。如果您使用任何代码注入脚本,您可以要求DNN注册jQuery或ScriptManager(用于ASP.NET AJAX),以便您可以使用这些库轻松连接事件。如果你不能保证那些在页面上,使用以下命令:

function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
    window.onload = func; 
    } else { 
    window.onload = function() { 
     if (oldonload) { 
     oldonload(); 
     } 
     func(); 
    } 
    } 
} 

addLoadEvent(function() { 
    initVar(); 
    moveBanner(); 
}); 
0

的CSS left属性需要的长度,而不是一个整数。您的必须具有非零长度的单位。 (即使使用JavaScript设置!)。

3

DotNetNuke的结合在JavaScript中 “的onload” 属性的最佳做法是挂钩到jQuery的ready()方法:

jQuery(document).ready(function() { 
    // put your code here 
    initVar(); 
    moveBanner(); 
}); 

的DotNetNuke 4.9.x以后的船与jQuery JavaScript库包括在内。