2011-07-05 156 views
1

我有一排圖像,當單擊其中一個圖像時,它會展開,同時也會縮小可能會放大的任何其他圖像。如果你點擊放大的圖片,它只會縮小。jQuery自定義函數並將參數傳遞給它們

我收到'收縮未定義'錯誤消息。提前致謝。

 $.fn.grow = function(size,rate) { 
      $(this).addClass('click').animate({'height': size}, rate); 
     } 
     $.fn.shrink = function(size,rate) { 
      $('img').removeClass('click').animate({'height': size}, rate); 
     } 

     $(document).ready(function() { 
      $('#gallery img').click(function() { 
       var $this = $(this); 
       ($this.hasClass('click')) ? $this.shrink('139', '200') : $this.shrink('139', '200').grow('700', '200'); 
      }); 
     }); 
+0

爲什麼你要聲明:var $ this = $(this); 我想說,使用變量名稱中的$選擇器來調整JQuery cuz ur。我不是100%確定是否允許這樣做,如果那是原因。但嘗試使用$(this),或者以不同的方式聲明你的變量..就像var me = $(this); – Jules

+0

@Jules具有前導'$'的變量在JavaScript中有效。 – alex

+0

其實很多人都認爲這個變量實際上是一個jQuery對象。 –

回答

2

我收到了不同的異常...

Uncaught TypeError: Cannot call method 'grow' of undefined

您試圖鏈的方法(或如果你喜歡Crockfordian條款使用級聯),但是沒有你的自定義函數返回一個jQuery對象。

你需要讓他們return的東西,一般this。在jQuery自定義函數中,this已經是一個jQuery對象,所以不需要重新包裝它。

+0

+1,儘管對於'shrink'方法,我想你會想返回'this',以便鏈接繼續在原始元素上。 [這是一個例子](http://jsfiddle.net/2QD3t/)。 – user113716

+0

@patrick謝謝,我應該仔細看看。 :) – alex

+0

...此外,'grow'方法可以執行'this.addClass('click')'。無需在問題中包裝它。 (爲了OP的緣故,我知道你知道的); o) – user113716

0

如果你使用$ .fn.extend這樣的:

$.fn.extend({ 
    shrink: function() {$(this).doSth()}, 
    grow: function() {$(this).doSth()} 
}); 

您將能夠運用你的收縮和增長方式,以任何jQuery的包裝的對象如

$('img').shrink(); 

希望它可以幫助

相關問題