2010-09-25 4 views
0

me sers tabswitch de http://www.hieu.co.uk/blog/index.php/tabswitch/Jquery renvoyant undefined

essaie d'ajouter des fonctionnalités supplémentaires pour ramener le nombre total d'onglets essaie de retourner une valeur dans la fonction l'état d'alerte dans getLength sort la valeur correcte mais la valeur retournée est définie

voici mon code:

//the function within tabswitch function: 
var getLength = function(){ 
    var $totalPages = parseInt((Obj.length)); 
    alert('getLength function totalPages = '+$totalPages); 
    $('.pagetotal').html(' '+$totalPages); //this correctly sets the element to the correct value 
    return ($totalPages); // this returns undefined? 
} 

function setTabIndex(){ 
    $totalPages = $('.SlideTab').tabSwitch('getlength'); //undefined? 
    $mypage = parseInt($(".SlideTab").tabSwitch('index')+1); 
    $currentIndex = parseInt($(".SlideTab").tabSwitch('index')); 
    $('.pageon').html('Page '+$mypage+' of'); 
    alert('totalPages = '+$totalPages+' myPage = '+$mypage+' currentindex = '+$currentIndex); //returns undefined for total pages?? 
    setButtons(); 
}; 

toute ta Code bswitch:

/* 
* .tabSwitch 
* Version: 1.0 
* http://www.hieu.co.uk/blog/index.php/tabswitch/ 
* 
* Copyright (c) 2009 Hieu Pham - http://www.hieu.co.uk 
* COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) 
* http://www.opensource.org/licenses/cddl1.php 
* 
* Date: 14/04/2009 
*/ 
(function($){ 
    $.fn.tabSwitch = function(command, Arguements, EndFunction) { 
     //Default value should be set here 
     var defaults = { 
      type : "toggle", //Type of effect 
      cols : 2, //This only used when you're using type = table 
      toggle : "fade", //This specific which type of toggle effect 
      ease : 40, 
      easeType: "linear", //This isn't work for this version yet 
      loopback: 0, //If it's 1 it will loop when it reach the ends 
      width : 400, // Size of the viewport 
      height : 400, 
      index : 0, //The current tab index 
      speed : 500, //Speed of the animation 
      interval: 5000, //The interval of auto-animate 
      step : 1, //How many step you want to use in moveStep 
      wrapperClass : "", //You could add extra class for the wraper 
      viewportClass : "" //You could add extra class for the viewport 
     }; 

     var Args = $.extend(defaults, Arguements); 
     var Obj = this; 

     var $totalPages = (Obj.length); 

     //For quicker access 
     var jFirstObj = Obj.eq(1); 
     var DOMFirstObj = Obj.eq(1).get(0); 
     if(!$.isFunction(EndFunction)){ 
      //Set the index in the cache 
      var Callback = function(){ 
       $.data(DOMFirstObj, "index", Args.index); 
      }; 
     } 
     else{ 
      var Callback = function(){ 
       $.data(DOMFirstObj, "index", Args.index); 
       EndFunction(); 
      }; 
     } 
     //Back up orginal information 
     StoreToCache = function(){ 
      //Now store the tab type in the cache for further use 
      $.data(DOMFirstObj, "type", Args.type); 
      $.data(DOMFirstObj, "toggle", Args.toggle); 
      $.data(DOMFirstObj, "cols", Args.cols); 
      $.data(DOMFirstObj, "ease", Args.ease); 
      $.data(DOMFirstObj, "easeType", Args.easeType); 
      $.data(DOMFirstObj, "index", Args.index); 
      $.data(DOMFirstObj, "loopback", Args.loopback); 
      //Before do anything to the object, keep a backup so we could revert it 
      if(jFirstObj.attr('style')){ 
       $.data(DOMFirstObj, "orgAttr", jFirstObj.attr('style')); 
      }else{ 
       $.data(DOMFirstObj, "orgAttr", ""); 
      } 
     } 
     //Remove all the data in cache and reset the object back to original 
     backFromCache = function(){ 
      Obj.attr('style',$.data(DOMFirstObj, "orgAttr")); 
      var ViewPortObj = $("#ViewPort"+$.data(DOMFirstObj)); 
      ViewPortObj.replaceWith(Obj); 
      //Remove auto if it's running 
      stopAuto(); 
      //Clear cacke 
      $.removeData(DOMFirstObj); 
     } 
     //Execute when input comment is create 
     var createTab = function(){ 
      //Back up orginal information 
      StoreToCache(); 
      //Construct the form 
      //Set all the CSS for the list div, this;s the common setting for all type of tab 
      if(Args.width) Obj.width(Args.width); 
      if(Args.height) Obj.height(Args.height);    
      //A big wraper around and change some CSS of the wrap 
      var WraperSelector = "WideDiv" + $.data(DOMFirstObj); 
      Obj.wrapAll("<div id='"+WraperSelector +"'></div>"); 
      var WraperObj = $("#"+WraperSelector); 
      WraperObj.addClass(Args.wraperClass); 
      WraperObj.css({"position":"relative"}); 
      WraperObj.wrap("<div id='" +WraperSelector.replace("WideDiv","ViewPort") + "'></div>") 
      //Now create the viewport with the input size 
      var ViewPortObj = $("#" + WraperSelector.replace("WideDiv","ViewPort")); 
      ViewPortObj.width(Args.width); 
      ViewPortObj.height(Args.height); 
      ViewPortObj.css({"display":"block","overflow":"hidden","position":"relative"});     
      ViewPortObj.addClass(Args.viewportClass); 
      switch(Args.type) 
      { 
       case "slide": 
        Obj.css({"float":"left"}); 
        //A big wraper around and change some CSS of the wrap 
        WraperObj.width((Args.width+2) * Obj.length); 
        //Now create the viewport with the input size 
        break; 
       case "scroll": 
        //A big wraper around and change some CSS of the wrap    
        WraperObj.width(Args.width); 
        WraperObj.height((Args.height+2) * Obj.length); 
        break; 
       case "toggle": 
        WraperObj.width(Args.width); 
        WraperObj.height(Args.height); 
        Obj.css({"position":"absolute", "left": "-999px"}); 
        Obj.eq(Args.index).css({"left":"0px", "top":"0px"}); 
        Obj.eq(Args.index).css("opacity", 1); 
        break; 
       case "table": 
        WraperObj.width(Args.width*Args.cols); 
        Obj.css("float", "left"); 
      } 
      moveTo(); 
     } 

     var getLength = function(){ 
      //$totalPages = parseInt((Obj.length)); 
      alert('getLength function totalPages = '+$totalPages); 
      $('.pagetotal').html(' '+$totalPages); 
      return ($totalPages); 
     } 
     // Move object to a position set by Args.Index 
     var moveTo = function(){ 

      //get the easeLevel from the cache 
      var ease = 0; 
      //Check if the next idx is out of the limit or not 
      if(!Args.easeType){ 
       Args.easeType = (DOMFirstObj, "easeType"); 
      } 
      if(Args.index > Obj.length -1){ 
       if($.data(DOMFirstObj, "loopback")!=0){ 
        Args.index = 0; 
        ease = -$.data(DOMFirstObj, "ease"); 
       } 
       else return; 
      } 
      if(Args.index < 0){ 
       if($.data(DOMFirstObj, "loopback")!=0){     
        Args.index = Obj.length-1; 
        ease = $.data(DOMFirstObj, "ease"); 
       } else return; 
      } 
      var WraperSelector = "WideDiv" + $.data(DOMFirstObj);    
      var WraperObj = $("#"+WraperSelector); 
      //See what type of effect we stimulate 
      switch($.data(DOMFirstObj, "type")){ 
       case 'slide': 
        //Get how much ease we set and start the animation 
        if(ease!=0){ 
         var easeLevel = (parseInt(WraperObj.css("left").replace("px",""))+ease); 
         WraperObj.animate({left: easeLevel+"px"}, Args.speed, function(){ 
          WraperObj.animate({left:-(Obj.outerWidth(true) * Args.index)+"px"}, Args.speed, Args.easeType, Callback());   
         }); 
        }else{ 
         WraperObj.animate({left:-(Obj.outerWidth(true) * Args.index)+"px"}, Args.speed, Args.easeType, Callback());   
        }    
       break; 
       case 'scroll': 
        //Get how much ease we set and start the animation 
        if(ease!=0){ 
         var easeLevel = (parseInt(WraperObj.css("top").replace("px",""))+ease); 
         WraperObj.animate({top: easeLevel+"px"}, Args.speed, function(){ 
          WraperObj.animate({top:-(Obj.outerHeight(true) * Args.index)+"px"}, Args.speed, Args.easeType, Callback());   
         }); 
        }else{ 
         WraperObj.animate({top:-(Obj.outerHeight(true) * Args.index)+"px"}, Args.speed, Args.easeType, Callback());   
        } 
       break; 
       case 'toggle': 
        //move the new one on top of the old div 
        Obj.eq(Args.index).css({"left":"0px", "top":"0px"}); 
        switch($.data(DOMFirstObj, "toggle")) 
        { 
         case "fade": 
          Obj.eq(Args.index).css({"opacity":0});            
          Obj.eq(Args.index).animate({"opacity":1},Args.speed); 
          if($.data(DOMFirstObj, "index")!=Args.index){ 
           Obj.eq($.data(DOMFirstObj, "index")).animate({"opacity":0},Args.speed, function(){ 
            $(this).css("left",-999); 
            Callback(); 
           }); 
          } 
          break; 
         case "toggle": 
          if($.data(DOMFirstObj, "index")!=Args.index){       
           Obj.eq(Args.index).css({"display":"none"}); 
           Obj.eq($.data(DOMFirstObj, "index")).slideUp(Args.speed, function(){ 
            Obj.eq(Args.index).slideDown(Args.speed, function(){Callback();});       
            $(this).css("left",-999);             
           }); 
          } 
          break; 
         case "show": 
          if($.data(DOMFirstObj, "index")!=Args.index){          
           Obj.eq(Args.index).css({"display":"none"}); 
           Obj.eq($.data(DOMFirstObj, "index")).hide(Args.speed, function(){ 
            Obj.eq(Args.index).show(Args.speed,function(){Callback();});        
            $(this).css("left",-999);             
           }); 
          } 
          break; 
         case "noeffect": 
          if($.data(DOMFirstObj, "index")!=Args.index){    
           Obj.eq($.data(DOMFirstObj, "index")).css("left", -999); 
           Callback(); 
          } 
          break; 
        } 
        break; 
       case "table": 
        var cols = $.data(DOMFirstObj, "cols"); 
        //Where the next idx in the table 
        var nextX = -(Args.index % cols) * Obj.width(); 
        var nextY = -Math.floor(Args.index/cols) * Obj.height(); 
        //Move horizontal first 
        WraperObj.animate({"left": nextX}, Args.speed, Args.easeType, function(){ 
         WraperObj.animate({"top": nextY}, Args.speed, Args.easeType, Callback()); 
        }); 
        break; 
       default: 
        $('html,body').animate({"scrollTop":Obj.eq(Args.index).offset().top},Args.speed); 
       break; 

      } 
     }; 

     //Move by steps 
     moveStep = function(){ 
      var currentIdx = $.data(DOMFirstObj, "index"); 
      //Calculate the next index 
      Args.index = parseInt(currentIdx) + parseInt(Args.step); 
      //Then move to it 
      moveTo(); 
     } 
     //Set it run auto 
     startAuto = function(){ 
      //Save the autoswitch into memory and start it 
      $.data(DOMFirstObj, "AutoSwitch", setInterval(moveStep, Args.interval)); 
     } 
     //Stop the auto 
     stopAuto = function(){ 
      //Stop the interval and clear the cache 
      clearInterval($.data(DOMFirstObj, "AutoSwitch")); 
      $.removeData(DOMFirstObj, "AutoSwitch"); 
     } 
     //Toggle auto 
     toggleAuto = function(){ 
      if(isAuto()){ 
       stopAuto(); 
      }else{ 
       startAuto(); 
      } 
     } 
     //Return if this is auto or not 
     isAuto = function(){ 
      if($.data(DOMFirstObj, "AutoSwitch")){ 
       return true; 
      }else{ 
       return false; 
      }  
     } 
     if(!command) command = ""; 
     //Check what user want 
     switch(command.toLowerCase()){ 
      case "index": 
       if($.data(DOMFirstObj, "index")){ 
        return $.data(DOMFirstObj, "index"); 
       }else{ 
        return 0; 
       } 
       break; 
      case "moveto": 
       moveTo(); 
       break; 
      case "movestep": 
       moveStep(); 
       break; 
      case "destroy": 
       backFromCache(); 
       break; 
      case "create": 
       createTab(); 
       break; 
      case "isauto": 
       return isAuto(); 
       break; 
      case "toggleauto": 
       toggleAuto(); 
       break; 
      case "startauto": 
       startAuto(); 
       break; 
      case "stopauto": 
       stopAuto(); 
       break; 
      case "getlength": 
       getLength(); 
       break; 
      case "pagecount": 
       pageCount(); 
       break; 
     } 
    }; 
})(jQuery); 
+1

Bienvenue sur StackOverflow! Veuillez cliquer sur le lien "modifier" et regarder les conseils de formatage affichés à droite de la zone d'édition. Ils vous disent comment formater le code, etc. Il y a aussi un orange ** [?] ** qui vous donnera plus d'informations. (Mise à jour: On dirait que Nick l'a formaté pour vous, mais s'il vous plaît jetez un oeil à la prochaine fois.) –

+0

ahh merci pour cela, mon premier post ici, de nombreux à venir j'imagine !!! –

Répondre

1

questions de cuvelage ici, vous probablement besoin d'appeler getLength pas getlength, comme ceci:

$totalPages = $('.SlideTab').tabSwitch('getLength'); 

également vous alerter et le retour des variables différentes, vous devez utiliser également $totalPages dans votre .html() appel ainsi:

$('.pagetotal').html(' '+$totalPages); 
+0

merci pour votre réponse, le cas n'est pas un problème car les appels de fonctions dans tabswitch sont tous convertis en minuscules: –

+0

@Dizzy - Assurez-vous que vous utilisez la même variable alors, actuellement vous ajoutez un indéfini, tout en alertant et renvoyer le bon. –