$find不在firefox中工作.ASP.NET幻灯片放映扩展器

本文关键字:幻灯片 NET 扩展器 ASP 工作 find 不在 firefox | 更新日期: 2023-09-27 18:01:08

我有一个asp.net ajax幻灯片扩展程序,我劫持了它,并将其变成了一个类似jquery的幻灯片控件。它在除firefox之外的所有浏览器中都能出色地工作。我已经将问题归结为$find调用不起作用。此外,我还必须在页面中放入一个setTimeout,以便在firefox中调用pageLoad。这在chrome或IE中也是不必要的。

这是代码。

setTimeout ( pageLoad(), 250 );
 function pageLoad(){       
    var slider1;     
    slider1 = $find('<%= slExtender.BehaviorID %>');           
    slider1.add_slideChanging(onSlideChanging);          
} 
 function onSlideChanging(sender, args)
 {         
    currentSlideIndex = args.get_slideIndex();   
    //Do what you want using this index        
    var arr = <%= serializer.Serialize(linkArray) %>;        
    for(var i = 0; i < arr.length; i++)
    {
      if(i == currentSlideIndex)
      {
         var link = document.getElementById(arr[i]); 
         link.className += "hovered";
      }
      else
      {
         var link = document.getElementById(arr[i]); 
         link.className = "";
      }
    }
 } 
function SlideClicked(slID) {
    var ss = $find(slID);
    var arr = <%= serializer.Serialize(urlArray) %>; 
    window.location = arr[ss._currentIndex];
}

看起来$find在firefox中返回了null。另外,你知道为什么我必须在页面上设置一个超时来调用页面加载吗?。

此外,SlideClicked中的$find也起作用。slID是slExtender.BehaviorID

更新

如果我添加

<script type="text/javascript"     src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

使用以下javascript:

$(document).ready(function () { 
  pageLoad();
});
 function pageLoad(){      
    var slider1;         
    slider1 = $find('<%= slExtender.BehaviorID %>');           
    slider1.add_slideChanging(onSlideChanging);          
} 
 function onSlideChanging(sender, args)
 {         
    currentSlideIndex = args.get_slideIndex();   
    //Do what you want using this index        
    var arr = <%= serializer.Serialize(linkArray) %>;        
    for(var i = 0; i < arr.length; i++)
    {
      if(i == currentSlideIndex)
      {
         var link = document.getElementById(arr[i]); 
         link.className += "hovered";
      }
      else
      {
         var link = document.getElementById(arr[i]); 
         link.className = "";
      }
    }
 } 
function SlideClicked(slID) {
    var ss = $find(slID);
    var arr = <%= serializer.Serialize(urlArray) %>; 
    window.location = arr[ss._currentIndex];
}

对页面来说,firefox中的一切都很好,不再适用于chrome或IE。我已经在主页上包含了1.4.1。

$find不在firefox中工作.ASP.NET幻灯片放映扩展器

窗口对象有一个事件"onload",但这只能在某些浏览器中正常工作。有了这个,您将向它附加一个回调,然后执行所有依赖DOM的代码。这在不同的浏览器中是不一样的(有时在DOM准备好遍历之前就启动了onload,这会导致问题(,所以你必须聪明一点。

幸运的是,您使用的是一个支持它的框架。jQuery有一个方便的函数ready()。以下是如何使用它的一个基本示例(由于大多数脚本都需要DOM,所以在任何地方都使用相同的形式(:

$(document).ready(function () {
    // execute your code here, like adding event listeners, doing find, etc
});

因此,使用您的特定代码,执行以下操作:

$(document).ready(function () {
    pageLoad();
});

我建议永远使用这种型号。永远不要在全局范围内调用代码,而是在DOM就绪时执行它。即使您不使用DOM,也可能最终会使用,所以这是有意义的。

$find('<%=slExtender.BehaviorID%>'(;

在上面的行中,如果"slExtender"是一个控件,则需要添加#。

将其设置为:$find('#<%=slExtender.BehaviorID%>'(;

试试这个。

对于页面加载问题,请尝试

$(函数(({var滑块1;

slider1 = $find('#<%= slExtender.BehaviorID %>');           
slider1.add_slideChanging(onSlideChanging); 

});