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