2

我在 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>
4

5 回答 5

3

我运行了你的代码。这两种方法都无需我对发布的代码进行任何修改即可执行。是否有其他代码覆盖了该onload方法?

于 2009-12-23T11:24:35.030 回答
3

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

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

DotNetNuke 4.9.x 和更高版本附带了 jQuery JavaScript 库。

于 2009-12-25T04:01:16.767 回答
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();
});
于 2009-12-23T20:22:24.690 回答
0

我对 asp.net 了解不多,但如果您可以将 javascript 代码放在您的页面中,那么您可以尝试以下替代方法:

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

这与您放入 body 标签的内容相同。

于 2009-12-23T10:44:52.900 回答
0

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

于 2009-12-23T20:25:11.130 回答