2

私はasp.netで1つの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

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 に答える
3

私はあなたのコードを実行しました。投稿されたコードを変更する必要なく、両方のメソッドが実行されました。onloadメソッドを上書きしている他のコードがある可能性がありますか?

于 2009-12-23T11:24:35.030 に答える
1

DNN の Default.aspx を編集しましたか? そうしないと、 body タグにアクセスして、表示されてonloadいるように属性を追加する方法がありません。

このスクリプトをどのように挿入していますか? テキスト/HTML モジュールを使用していますか? ページのページ ヘッダー テキスト設定を使用していますか? 直接スキンに追加していますか? カスタム モジュールを作成しましたか?

onloadbody タグで属性を使用する代わりに、スクリプト自体でそのイベントに接続することをお勧めします。コードを使用してスクリプトを挿入する場合は、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

CSS の left プロパティは、整数ではなく長さを取ります。ゼロ以外の長さの単位が必要です。(JavaScript を使用して設定する場合でも!)。

于 2009-12-23T20:25:11.130 に答える
0

asp.net についてはよくわかりませんが、ページに JavaScript コードを配置できる場合は、次の代替手段を試すことができます。

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

これは body タグに入れるものと同じです。

于 2009-12-23T10:44:52.900 に答える