body onload在Javascript中不起作用

时间:2009-12-23 10:38:26

标签: javascript javascript-events dotnetnuke onload

我在asp.net上写过一个JS。我从body onload调用了它,但是在调试器放置的地方JS没有被调用。可能的原因是什么?我正在dotnetnuke开发网站。

我写的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>

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

用于绑定到JavaScript中“onload”属性的DotNetNuke最佳实践是挂钩到JQuery的ready()方法:

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

DotNetNuke 4.9.x及更高版本随附jQuery JavaScript库。

答案 2 :(得分:1)

您是否编辑过DNN的Default.aspx?否则,您无权访问body标记以添加您显示的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();
});

答案 3 :(得分:0)

我对asp.net了解不多,但是如果你可以在你的页面中添加javascript代码,那么你可以试试这个替代方案:

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

这与你在body标签中的内容相同。

答案 4 :(得分:0)

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