我有一个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。
答案 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);
});