2013-07-31 180 views
0

我有一個小問題,在無序列表中創建列表項目中的對象。我創建一個畫廊,我需要爲每個畫廊縮略圖,它是自己的對象,所以我遍歷每個列表項使用jQuery的$ .each()從列表元素創建javascript對象

問題是我不知道如何給每個對象/它是它自己的實例名稱。

下面的代碼:

function galleryButton(){ 
     this.link 
     this.name 
     this.image 
     this.identifier, 
     this.goPage = function(){ 
     $('.container').animate({opacity : '0'}, 500).load(this.link + ' .galContainer', function(){$('.container').animate({opacity : '1'})}); 
     return false; 
     } 
    } 

    $(document).ready(function(){ 
     $.ajaxSetup({ 
      cache:false 
     }); 

     $('.gallery li a').each(function(node, value){ 
      this = new galleryButton(); 
      this.link = $(this).attr('href'); 
      this.name = $(this).attr('name'); 
      this.image = $(this + " img").attr('src'); 
      this.identifier = $(this).attr('data-pic-id'); 

      $(this).click(this.goPage); 
     }) 

     $('.goback').click(function(){ 

      var back = $(this).attr('href'); 
      $('.container').animate({opacity : '0'}, 500).load(back + ' .gallery', function(){$('.container').animate({opacity : '1'})}); 
       return false; 
     }); 

    }); 
+0

你不能指定['this'關鍵字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)!!! – Bergi

回答

0

這並不作任何意義:

$('.gallery li a').each(function(node, value){ 
     this = new galleryButton(); 
     this.link = $(this).attr('href'); 
     this.name = $(this).attr('name'); 
     this.image = $(this + " img").attr('src'); 
     this.identifier = $(this).attr('data-pic-id'); 

     $(this).click(this.goPage); 
    }); 

你不想覆蓋this,你想創建一個像一個新的對象:所以在這種情況下slide

 var slide = new galleryButton(); 
     slide.link = $(this).attr('href'); 
     slide.name = $(this).attr('name'); 
     slide.image = $(this + " img").attr('src'); 
     slide.identifier = $(this).attr('data-pic-id'); 

是實例名,但它只會在該函數的每個回調函數的範圍內存在。

現在如果您需要能夠訪問這些對象,那麼您需要在函數外創建變量或將它們放在其他地方可訪問的位置。要不是我,我將它們存儲在datali像:

 var slide = new galleryButton(); 
     slide.link = $(this).attr('href'); 
     slide.name = $(this).attr('name'); 
     slide.image = $(this + " img").attr('src'); 
     slide.identifier = $(this).attr('data-pic-id'); 
     $(this).closest('li).data('slide', slide); 

然後你就可以像$(someSelectorToGetTheLI).data('slide')訪問它們。

+0

如何使用$(someSelectToGetLI).data('slide)訪問對象的屬性?我會去$(東西).data('slide).link? – Optymystyc

+0

是的,但是您應該始終確保您確實擁有該對象 - 如果您沒有使用.data設置它,那麼'.data'將返回undefined,因此直接使用'.link'會引發錯誤。所以像這樣:'sliceObj = $(someSelectToGetLI).data('slide');如果(幻燈片){//做類似slide.link}的東西'' – prodigitalson

1

您galleryButton不要存放到 「這個」 變量。創建一個新的變種,

var myGalleryButton = new galleryButton(); 

和更新的任務:

myGalleryButton.link = $(this).attr('href'); 
/// etc 

,然後在。每個()函數的末尾,推動myGalleryButton以供以後訪問數組/對象。