Javascript中的身体负荷

问题描述 投票:2回答:5

我曾用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>
javascript dom-events dotnetnuke onload
5个回答
3
投票

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


3
投票

DotNetNuke在JavaScript中绑定 "onload "属性的最佳实践是挂入JQuery的ready()方法。

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

DotNetNuke 4.9.x及以后的版本都包含jQuery JavaScript库。


1
投票

你是否编辑了DNN的Default.aspx? 否则,你就没有办法访问body标签来添加一个新的属性。onload 属性,就像你展示的那样。

你是如何注入这个脚本的? 你是使用了TextHTML模块,是使用了页面的页眉文字设置,是直接添加到皮肤中,还是写了一个自定义模块,还是其他什么?

而不是使用 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
投票

我对asp.net了解不多,但如果你能在页面中加入javascript代码,那么你可以试试这个方法。

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

这和你在body标签里放的东西是一样的。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.