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