2011-04-12 179 views
3

我有幾個鏈接都使用了類似的函數,所以我想調用該函數並從調用該對象的對象傳遞它的屬性。我該怎麼做呢?如何使用jQuery將對象引用傳遞給函數?

這是我的代碼:

$('.flash').click(function(){ 
    getDimensions($(this)); 
    swfobject.embedSWF(fileRef, "myContent", fileWidth, fileHeight, "9.0.0"); 
}); 

function getDimensions(linkRef){ 
    fileHeight = $(linkRef).attr('data-height'); 
    fileWidth = $(linkRef).attr('data-width'); 
} 

我是不是引用$(this)不當?

+0

除了這兩個功能使用通訊全局的事實,什麼是不工作?它看起來應該起作用。 – Jon 2011-04-12 22:17:53

+0

你會怎麼寫沒有全局?我認爲這是我的問題實際上 - 我需要該函數來返回fileWidth和fileHeight並執行其餘的點擊功能 – mheavers 2011-04-12 22:19:24

回答

6
$('.flash').click(function(){ 
    var dimensions = getDimensions($(this)); 
    swfobject.embedSWF(fileRef, "myContent", dimensions.fileWidth, dimensions.fileHeight, "9.0.0"); 
}); 


function getDimensions(linkRef){ 
    return { 
    fileHeight: $(linkRef).attr('data-height'), 
    fileWidth: $(linkRef).attr('data-width') 
    } 
} 
+0

@mheavers:做了這項工作?我不認爲這會起作用,因爲你已經將一個JQuery對象傳遞給了getDimensions,並且你又將它包裝在另一個$()函數中。看到我的答案。 – euphoria83 2011-04-12 22:35:13

+0

@ euphoria83:這在jQuery中完全沒問題。如果您將jQuery對象傳遞給$(),它只會返回原始集合。 $($(this))== $(this); – 2011-04-12 22:37:01

1

沒有全局變量,你可以返回一個JSON對象:

$('.flash').click(function(){ 
    var d = getDimensions($(this)); 
    swfobject.embedSWF(fileRef, "myContent", d.width, d.height, "9.0.0"); } 
); 

function getDimensions(linkRef){ 
    return { "height" : $(linkRef).attr('data-height'), 
      "width" : $(linkRef).attr('data-width') } 
} 
+0

這非常有幫助。你能解釋爲什麼這比按照保羅亞歷山大的建議做得更好嗎? – mheavers 2011-04-12 22:33:00

+0

@mheavers我認爲這與保羅·亞歷山大建議的答案是一樣的,只是幾乎在同一時間發佈;) – Dave 2011-04-12 22:38:15

+0

@mheavers:思考一下它可能會更清晰一些,因爲「高度」和「寬度」是名稱的屬性,而不是某些變種的名稱 – Dave 2011-04-12 22:44:10

0

既然你已經傳遞一個jQuery對象getDimensions功能,你不需要包裝的說法,linkRef,在另一個函數getDimensions中的$()函數。

使用這個代替:(!不好)

function getDimensions(linkRef){ 
    fileHeight = linkRef.attr('data-height'); 
    fileWidth = linkRef.attr('data-width'); 
} 
+0

雖然這是真的,但您不需要重新包裝,這樣做完全沒問題。如果您將jQuery對象傳遞給$(),它只會返回原始集合。 $($(this))== $(this);將傳入的參數包裝到$()中以確保您始終處理jQuery集合很常見。 – 2011-04-12 22:38:50

相關問題