C# $find无法在firefox中工作。ASP.NET幻灯片放映扩展程序

C# $find无法在firefox中工作。ASP.NET幻灯片放映扩展程序,c#,javascript,jquery,asp.net,ajax,C#,Javascript,Jquery,Asp.net,Ajax,我有一个asp.NETAJAX幻灯片扩展程序,我劫持了它,并将它变成了类似于jquery的幻灯片放映控件。它在除firefox之外的所有浏览器中都能出色地工作。我已将问题隔离到$find呼叫不起作用。此外,我还必须在页面中输入一个setTimeout,以便pageLoad在firefox中调用。这在chrome或IE中也是不必要的 这是代码 setTimeout ( pageLoad(), 250 ); function pageLoad(){ var slider1;

我有一个asp.NETAJAX幻灯片扩展程序,我劫持了它,并将它变成了类似于jquery的幻灯片放映控件。它在除firefox之外的所有浏览器中都能出色地工作。我已将问题隔离到$find呼叫不起作用。此外,我还必须在页面中输入一个setTimeout,以便pageLoad在firefox中调用。这在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];
}
setTimeout(pageLoad(),250);
函数pageLoad(){
var滑块1;
slider1=$find(“”);
滑块1.添加\u滑块更改(滑动更改);
} 
函数更改(发送方、参数)
{         
currentSlideIndex=args.get_slideIndex();
//使用此索引执行所需操作
var-arr=;
对于(变量i=0;i
在firefox中,$find似乎返回null。还有,你知道我为什么要在页面上设置一个超时来调用pageload吗

此外,SlideClicked中的$find也可以使用。Slide是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];
}
$(文档).ready(函数(){
页面加载();
});
函数pageLoad(){
var滑块1;
slider1=$find(“”);
滑块1.添加\u滑块更改(滑动更改);
} 
函数更改(发送方、参数)
{         
currentSlideIndex=args.get_slideIndex();
//使用此索引执行所需操作
var-arr=;
对于(变量i=0;i
就页面而言,firefox中的一切都很好,不再适用于chrome或IE。 母版页上已经包含了1.4.1。

$find(“”)

在上行中,如果“slExtender”是一个控件,则需要添加#

让它像:$find(“#”)

试试这个

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

$(函数(){ var滑块1

slider1 = $find('#<%= slExtender.BehaviorID %>');           
slider1.add_slideChanging(onSlideChanging); 
slider1=$find('#');
滑块1.添加\u滑块更改(滑动更改);

}))

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

幸运的是,您正在使用一个支持它的框架。jQuery有一个方便的函数
ready()
。下面是一个如何使用它的基本示例(在任何地方都使用相同的表单,因为大多数脚本都需要DOM):

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

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

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

是否将此代码附加到window.onload事件?这可能是firefox的错误。它在用户控件中,所以不,我没有附加它,因为我没有访问表单标签的权限。firefox的错误?我不知道这种行为有一个众所周知的错误。我指的是你在代码中提到的错误。如果DOM还没有准备好,那么在元素准备好之前访问它们可能会出现问题。Chrome在加载资源的方式和时间上可能与Firefox稍有不同。我知道大多数现代浏览器都是并行加载的,所以可能存在竞争条件?无论如何,等到dom完全准备好之后再做事情更安全。我写了一个答案来解释这个想法。尝试一下这个建议,如果它有效的话,在任何地方都可以使用它。依靠setTimeout来猜测DOM何时准备好是一种糟糕的形式,而且容易出错。添加#在chrome和IE中破坏了它,而在firefox中没有修复它。这在用户控件中有效吗?在我发布这个问题的那天晚上,我尝试了类似的方法,但没有成功。今晚我将再试一次,并让您知道。$(文档)。在firefox中不会调用ready。它在所有其他方面都有效。啊,明白了!这本书不在我的主页上。另外,我需要将我的方法名从pageLoad更改为其他名称。
$(document).ready(function () {
    pageLoad();
});