$找不到在Firefox中工作。 ASP.NET幻灯片扩展器

时间:2011-07-04 07:11:21

标签: c# javascript jquery asp.net ajax

我有一个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。另外,无论如何都知道为什么我必须在页面上设置超时才能调用pageload?。

另外,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。

2 个答案:

答案 0 :(得分:1)

窗口对象有一个事件'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,你最终也可能会这样,所以它是有意义的。

答案 1 :(得分:0)

$ find('&lt;%= slExtender.BehaviorID%&gt;');

在上面一行中,如果“slExtender”是一个控件,那么你需要添加#。

使它像:$ find('#&lt;%= slExtender.BehaviorID%&gt;');

试试这个。

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

$(function(){  var slider1;

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

});