2013-01-06 60 views
1

我正在开发一个新网站。我已经编写了很多,但没有像这个一样先进。 我有一个HTML文件,这是主页。现在,我正在通过ajax更改页面的内容。一切正常。所以当我点击时,可以说,“主页”菜单,它调用该函数,并获取其中包含内容的另一个HTML文件。Javascript将不会执行

在我的主HTML我有这样的:

<html> 
    <head> 
    <title> 
     Estancia 
    </title> 
    <link rel="stylesheet" href="css/stylesheet.css"/> 
    <link rel="stylesheet" href="webfont/webFontStylesheet.css" type="text/css" charset="utf-8"/> 
    <script type="text/javascript" src="js/ajax.js"></script> 
</head> 
<body onLoad = "javascript:home()"> 
    <div id = "bodyLeft"> 
     <!-- This is just a sideskirt --> 
    </div> 
    <div id = "bodyRight"> 
     <!-- This is just a sideskirt --> 
    </div> 

    <div id = "header"> 
     <h1> 
      Estancia 
     </h1> 

    </div> 
    <div id = "footer"> 
     <h5> 
      Copyright&copy; 2013 
     </h5> 
    </div> 
    <div id = "background"> 
     <!-- This is just the background color --> 
    </div> 
    <div id = "scrollCover"> 
     <!-- Used to cover the scrolled content --> 
    </div> 
    <div id = "body"> 

    </div> 
    <div id = "content"> 
     If you see this then the page did not load correctly. Try reloading the page. If problem persists, try reinstalling the Mozilla Firefox Browser. <br/><br/> Error: Javascript may not be working. <br/> Fix: Enable Javascript in your browser. 
    </div> 
    <div id = "menu"> 
     <div id = "home" onClick="javascript:home()"> 
      <a href = "#"> Home </a> 
     </div> 
     <div id = "information"> 
      <a href = "#"> Information </a> 
      <span id = "aboutDrop"> 
       <a class = "about" href="#" onClick = "javascript:about()"> About </a> 
       <br/> 
       <a class = "map" href="#" onClick = "javascript:map()"> Map </a> 
      </span> 
     </div> 
     <div id = "history" onClick = "javascript:history()"> 
      <a href = "#"> History </a> 
     </div> 
     <div id = "pictureGallary"> 
      <a href = "#"> Picture Gallary </a> 
      <span id = "pictureGalleryDrop"> 
       <a class = "ef" href = "#" onClick = "javascript:estanciaFarm()"> Estancia Farm </a> 
       <br/> 
       <a class = "ca" href = "#" onClick = "javascript:cattle()"> Cattle </a> 
       <br/> 
       <a class = "ga"href = "#" onClick = "javascript:game()"> Game </a> 
       <br/> 
       <a class = "go" href = "#" onClick = "javascript:goats()"> Goats </a> 
       <br/> 
       <a class = "sh" href = "#" onClick = "javascript:sheep()"> Sheep </a> 
      </span> 
     </div> 
    </div> 
</body> 

这里没有问题......当我点击它正确加载。 所以,点击首页的时候,它改变通过AJAX这样的内容:

var xmlhttp = new XMLHttpRequest(); 
    var path; 
    var div; 

function home() 
{ 
    path = "html/home.html"; 
    div = "content"; 
    AJAX(path, div); 
} 

    function AJAX(path, div) 
{ 
    xmlhttp.open("GET", path, false); 
    xmlhttp.send(); 
    if (xmlhttp.readyState == 4) 
    { 
     document.getElementById(div).innerHTML = xmlhttp.responseText; 
    } 
} 

正如你可以看到它加载另一个HTML文件上的内容。 所以,这里是HTML文件的代码:

<html> 
<head> 
    <link rel="stylesheet" href="css/homeMenu.css"/> 
    <script type="text/javascript" src="js/javascript.js"></script> 
</head> 
<body> 
    <div id = "slideshow"> 
     <div id = "first"> 
      <img id = "a1" src = "images/home/img1_e.jpg"/> 
      <img id = "a2" src = "images/home/img2_e.jpg"/> 
      <img id = "a3" src = "images/home/img3_e.jpg"/> 
      <img id = "a4" src = "images/home/img4_e.jpg"/> 
     </div> 
     <div id = "second"> 
      <img id = "b4" src = "images/home/img4_e.jpg"/> 
      <img id = "b1" src = "images/home/img1_e.jpg"/> 
      <img id = "b2" src = "images/home/img2_e.jpg"/> 
      <img id = "b3" src = "images/home/img3_e.jpg"/> 
     </div> 
     <div id = "third"> 
      <img id = "c3" src = "images/home/img3_e.jpg"/> 
      <img id = "c4" src = "images/home/img4_e.jpg"/> 
      <img id = "c1" src = "images/home/img1_e.jpg"/> 
      <img id = "c2" src = "images/home/img2_e.jpg"/> 

     </div> 
     <div id = "fourth"> 
      <img id = "d2" src = "images/home/img2_e.jpg"/> 
      <img id = "d3" src = "images/home/img3_e.jpg"/> 
      <img id = "d4" src = "images/home/img4_e.jpg"/> 
      <img id = "d1" src = "images/home/img1_e.jpg"/> 
     </div> 
    </div> 
    </body> 

当我加载在其自己的这个HTML文件,它工作正常。我需要改变的是在每个图像路径的开始处添加“../”。我相信你会知道为什么。快速描述是,如果它在它自己,它如果在另一个文件,所以它需要返回一次。当它通过ajax加载到另一个主要的html中时,它在每个文件的外面并进入它。好,那很明显。

问题......我唯一面临的问题是,当我自己加载home.html文件时,它像一块蛋糕一样执行它的JavaScript。

但是,当它加载到主html中,它不起作用。它没有办法执行。我试过内部JavaScript,但它仍然不工作。

这里的JavaScript:

var useBSNns; 

     if (useBSNns) 
     { 
      if (typeof(bsn) == "undefined") 
       bsn = {} 
      var _bsn = bsn; 
     } 
     else 
     { 
      var _bsn = this; 
     } 

     _bsn.Crossfader = function (divs, fadetime, delay) 
     { 
      this.nAct = -1; 
      this.aDivs = divs; 

      for (var i=0;i<divs.length;i++) 
      { 
       document.getElementById(divs[i]).style.opacity = 0; 
       document.getElementById(divs[i]).style.position = "absolute"; 
       document.getElementById(divs[i]).style.filter = "alpha(opacity=0)"; 
       document.getElementById(divs[i]).style.visibility = "hidden"; 
      } 

      this.nDur = fadetime; 
      this.nDelay = delay; 

      this._newfade(); 
     } 

     _bsn.Crossfader.prototype._newfade = function() 
     { 
      if (this.nID1) 
       clearInterval(this.nID1); 

      this.nOldAct = this.nAct; 
      this.nAct++; 
      if (!this.aDivs[this.nAct]) this.nAct = 0; 

      if (this.nAct == this.nOldAct) 
       return false; 

      document.getElementById(this.aDivs[this.nAct]).style.visibility = "visible"; 

      this.nInt = 50; 
      this.nTime = 0; 

      var p=this; 
      this.nID2 = setInterval(function() { p._fade() }, this.nInt); 
     } 

     _bsn.Crossfader.prototype._fade = function() 
     { 
      this.nTime += this.nInt; 

      var ieop = Math.round(this._easeInOut(this.nTime, 0, 1, this.nDur) * 100); 
      var op = ieop/100; 
      document.getElementById(this.aDivs[this.nAct]).style.opacity = op; 
      document.getElementById(this.aDivs[this.nAct]).style.filter = "alpha(opacity="+ieop+")"; 

      if (this.nOldAct > -1) 
      { 
       document.getElementById(this.aDivs[this.nOldAct]).style.opacity = 1 - op; 
       document.getElementById(this.aDivs[this.nOldAct]).style.filter = "alpha(opacity="+(100 - ieop)+")"; 
      } 

      if (this.nTime == this.nDur) 
      { 
       clearInterval(this.nID2); 

       if (this.nOldAct > -1) 
        document.getElementById(this.aDivs[this.nOldAct]).style.visibility = "hidden";  

       var p=this; 
       this.nID1 = setInterval(function() { p._newfade() }, this.nDelay); 
      } 
     } 

     _bsn.Crossfader.prototype._easeInOut = function(t,b,c,d) 
     { 
      return c/2 * (1 - Math.cos(Math.PI*t/d)) + b; 
     } 

请,什么错误,它不希望在其home.html的被装载到主HTML来执行,但是当home.html的是在其自己的IT执行作品?

+0

你看的JavaScript错误日志/控制台? – 2013-01-06 17:02:02

+0

这听起来像你失去了你的事件处理程序,因为你正在用Ajax重新加载页面的一部分。你的ajax请求是否覆盖了所有内容? – TommyBs

+0

是的,我认为它会覆盖所有的东西,因为当我点击另一个菜单项时,它会带走所有内容,并用内容替换整个div,让我们来说说,使用ajax将其加载到该div中的about.html文件。 –

回答

0

我知道你已经把很多工作放到了你的工作中,但是看一下jQuery插件(比如Cycle)可能会有所帮助。 http://malsup.com/jquery/cycle


Otherhand,你需要从Home.html页您检索删除<script type="text/javascript" src="js/javascript.js"></script>,并具有在main.html文件的头部你是从加载你的二级页面。它将被称为不通过AJAX负载内联执行,这是您遇到的问题。因此,我们将其移至main.html,我们将在加载页面home.html时手动调用它。

我已经改变了您的AJAX方法,以便在AJAX成功时采用回调方法或函数。你会看到你的AJAX方法的第三个参数是完成时要调用的函数,在我们的例子中,它是startBSN,你会看到我用这种方法进一步包装你的js/javascript函数。

var xmlhttp = new XMLHttpRequest(); 
var path; 
var div; 

function home() 
{ 
    path = "html/home.html"; 
    div = "content"; 
    AJAX(path, div, 'startBSN'); 
} 

function AJAX(path, div, callback) 
{ 
    xmlhttp.open("GET", path, false); 
    xmlhttp.send(); 
    if (xmlhttp.readyState == 4) 
    { 
     document.getElementById(div).innerHTML = xmlhttp.responseText; 
     window[callback](); 
    } 
} 

我已经删除您js/javascript.js,其中包括它在main.html头,你应该从你home.html

我还包裹着你的js/javascript.js代码到名为startBSN否则将一个可调用的函数删除作为匿名函数在页面加载上运行。

这是您js.javascript文件与周边功能startBSN

function startBSN(){ 
    var useBSNns; 

    if (useBSNns) 
    { 
     if (typeof(bsn) == "undefined") 
      bsn = {} 
     var _bsn = bsn; 
    } 
    else 
    { 
     var _bsn = this; 
    } 


    _bsn.Crossfader = function (divs, fadetime, delay) 
    { 
     this.nAct = -1; 
     this.aDivs = divs; 

     for (var i=0;i<divs.length;i++) 
     { 
      document.getElementById(divs[i]).style.opacity = 0; 
      document.getElementById(divs[i]).style.position = "absolute"; 
      document.getElementById(divs[i]).style.filter = "alpha(opacity=0)"; 
      document.getElementById(divs[i]).style.visibility = "hidden"; 
     } 

     this.nDur = fadetime; 
     this.nDelay = delay; 

     this._newfade(); 
    } 

    _bsn.Crossfader.prototype._newfade = function() 
    { 
     if (this.nID1) 
      clearInterval(this.nID1); 

     this.nOldAct = this.nAct; 
     this.nAct++; 
     if (!this.aDivs[this.nAct]) this.nAct = 0; 

     if (this.nAct == this.nOldAct) 
      return false; 

     document.getElementById(this.aDivs[this.nAct]).style.visibility = "visible"; 

     this.nInt = 50; 
     this.nTime = 0; 

     var p=this; 
     this.nID2 = setInterval(function() { p._fade() }, this.nInt); 
    } 

    _bsn.Crossfader.prototype._fade = function() 
    { 
     this.nTime += this.nInt; 

     var ieop = Math.round(this._easeInOut(this.nTime, 0, 1, this.nDur) * 100); 
     var op = ieop/100; 
     document.getElementById(this.aDivs[this.nAct]).style.opacity = op; 
     document.getElementById(this.aDivs[this.nAct]).style.filter = "alpha(opacity="+ieop+")"; 

     if (this.nOldAct > -1) 
     { 
      document.getElementById(this.aDivs[this.nOldAct]).style.opacity = 1 - op; 
      document.getElementById(this.aDivs[this.nOldAct]).style.filter = "alpha(opacity="+(100 - ieop)+")"; 
     } 

     if (this.nTime == this.nDur) 
     { 
      clearInterval(this.nID2); 

      if (this.nOldAct > -1) 
       document.getElementById(this.aDivs[this.nOldAct]).style.visibility = "hidden";  

      var p=this; 
      this.nID1 = setInterval(function() { p._newfade() }, this.nDelay); 
     } 
    } 

    _bsn.Crossfader.prototype._easeInOut = function(t,b,c,d) 
    { 
     return c/2 * (1 - Math.cos(Math.PI*t/d)) + b; 
    } 
} 
+0

约翰你好,是的,我看到你在做什么,我想它。 JavaScript文件的目的是淡化图像。我输入了一个警报(“Calls!”),它正确地调用了文件,但是我的图像仍然没有开始褪色。这在我自己加载home.html时起作用,但由于某些原因,当我使用ajax时不起作用。我不知道......我要开始拉我的头发了。 –

+0

我知道你已经将大量工作投入到了你的工作中,但看一下jQuery插件(如Cycle)可能会有所帮助。 http://malsup.com/jquery/cycle/ –

+0

好的很酷...jQuery将不得不这样做,因为它的工作。只需要google,然后复制并粘贴代码。谢谢。 –