2011-07-25 121 views
1

我有这个全局函数我写道:全局变量的麻烦

var aSpecimen = 0; 

$(function(){ 
    function prodCarousel(div){ 
    $(div).find('li.next a').click(function() { 
     $(div).find('ul.display li').hide(); 
     $(div).find('.viewer ul li.img').siblings().removeClass('viewerOn'); 
     aSpecimen = aSpecimen + 1; 

     if (aSpecimen == $(div).find('ul.display li').length + 0) 
      aSpecimen = 0; 

     if (aSpecimen == $(div).find('.img').length + 0) 
      aSpecimen = 0; 

     $(div).find('ul.display li:eq(' + aSpecimen + ')').fadeIn("fast"); 

     $(div).find('.img:eq(' + aSpecimen + ')').addClass('viewerOn'); 

     return false; 
    }); 

    $('li.prev a').click(function() { 
     $(div).find('ul.display li').hide(); 
     $(div).find('.viewer ul li.img').siblings().removeClass('viewerOn'); 
     aSpecimen = aSpecimen - 1; 

     if (aSpecimen == -1) aSpecimen = $(div).find('ul.display li').length - 1; 

     $(div).find('ul.display li:eq(' + aSpecimen + ')').fadeIn("fast"); 
     $(div).find('.viewer ul li.img:eq(' + aSpecimen + ')').addClass('viewerOn'); 
     return false; 
    }); 
    } 
}); 

我试图用称呼它为以下几点:

$(document).ready(function() { 

     function prodNav(div, self){ 
     $("#product1, #product2").empty(); 
     $('#product'+div).load('product'+div+'.html'); 
     $("ul.prodDetails li a").removeClass("prod1DetailsOn prod2DetailsOn prod3DetailsOn prod4DetailsOn"); 
     $("ul.prodDetails li.details1 a").addClass('prod'+div+'DetailsOn'); 
     $("#productsAll nav li a").removeClass("prodMainNav1 prodMainNav2 prodMainNav3 prodMainNav4"); 
     $(self).addClass('prodMainNav'+div); 
     prodCarousel('#product'+div); 
     } 
    }): 

$("#productsAll nav li.prod1 a").click(function(){ 
    prodNav("1", this); 
    return false; 
}); 

$("#productsAll nav li.prod2 a").click(function(){ 
    prodNav("2", this); 
    return false; 
}); 

}); 

它不工作。任何想法我做错了什么?谢谢,

+1

'它不起作用'是什么?你有什么错误?什么不正确?你期望它做什么? – PeeHaa

+1

说明“不起作用”? –

+1

提示:“它不起作用”是解释错误的最没有帮助的方式,什么不起作用?什么是意外的?你期望什么?它展示了什么行为?看看我的意思吗? –

回答

0

我不知道,如果这是唯一的问题,但此行:

$('#product'+div).load('product'+div+'.html'); 

是一个异步调用。它开始加载产品div中的内容。但是,稍后在相同的执行线程中,您可以在该div上调用prodCarousel,它在我看来就像您期望内容已经在那里一样。它可能不会在那里。

您可能必须在加载调用中使用完成功能,并在像这样成功加载后处理该内容。

$('#product'+div).load('product'+div+'.html', function() { 
    // call prodCarousel() on the new content here 
}); 
0

将函数放在$()中是document.ready()的简写。 ProdCarousel正在被定义在一个匿名函数的范围内 - 只是将它移动到那个范围之外。