нагрузка на тело не работает в JavaScript - PullRequest
2 голосов
/ 23 декабря 2009

я написал один JS в asp.net. Я вызвал это из-за загрузки тела, но JS не вызывают там, где я поставил свой отладчик. Какие могут быть возможные причины для этого? Я занимаюсь разработкой сайта в дотнетнуке.

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 ]

3 голосов
/ 25 декабря 2009

Лучшая практика DotNetNuke для привязки к свойству "onload" в JavaScript - это использование метода ready () JQuery:

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

DotNetNuke 4.9.x и более поздних версий поставляются с включенной библиотекой jQuery JavaScript.

3 голосов
/ 23 декабря 2009

Я запустил твой код. Оба метода выполняются без необходимости внесения каких-либо изменений в опубликованный код. Возможно, есть какой-то другой код, который перезаписывает метод onload?

1 голос
/ 23 декабря 2009

Вы редактировали DNN's Default.aspx? В противном случае вы не сможете получить доступ к тегу body, чтобы добавить атрибут onload, как вы видите.

Как вы вводите этот скрипт? Используете ли вы текстовый / HTML-модуль, используете ли вы параметр «Текст заголовка страницы» для страницы, добавляете ли вы его непосредственно в скин, написали ли вы собственный модуль или что-то еще?

Вместо использования атрибута onload в теге body я бы предложил подключить это событие в самом скрипте. Если вы используете какой-либо код для внедрения сценария, вы можете попросить 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 голосов
/ 23 декабря 2009

Свойство left CSS имеет длину, а не целое число. У вас должны быть единицы для ненулевой длины. (Даже при настройке с использованием JavaScript!).

0 голосов
/ 23 декабря 2009

Я не очень разбираюсь в asp.net, но если вы можете разместить код javascript на своей странице, вы можете попробовать эту альтернативу:

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

Это то же самое, что вы указали в теге тела.

...