2012-10-18 110 views
1

我希望能夠聲明一個函數,我可以使用任何選擇器或方法,因此我認爲它可以像下面這樣完成,但它不起作用!

這是爲什麼? :)

$(document).ready(function() { 

    $('img').hover(function(){ 
     imageClass(); 
    }); 

    function imageClass() { 
     var thisClass = $(this).attr('class'); 
     console.log(thisClass) 
    } 

}); 

回答

6

您可以從懸停事件傳遞$(this)argument,所有你需要的是改變imageClass method to receive a parameter

$(document).ready(function() { 

    $('img').hover(function(){ 
     imageClass($(this)); 
    }); 

    function imageClass(obj) { 
     var thisClass = obj.attr('class'); 
     console.log(thisClass) 
    } 

}); 
+2

'$(obj)'是一種矯枉過正。只要'obj'就夠了 – zerkms

+0

你不需要在imageClass函數中再次用$()包裝obj,因爲你已經將它作爲jQuery對象傳遞了。 – MarcoK

+0

謝謝@zerkms,只是更新的答案 – Adil

0

然而,這也將工作:

$('img').hover(imageClass); 

function imageClass() { 
    var thisClass = $(this).attr('class'); 
    console.log(thisClass) 
} 

而且多了一個選項:

$('img').hover(imageClass); 

function imageClass(e) { 
    var thisClass = $(e.target).attr('class'); 
    console.log(thisClass) 
} 
0

您可以試試jQuery.proxy。它會讓你通過this

如果你無法弄清楚讓我知道。

+2

在這種情況下,你甚至不需要'$ .proxy()'。 'imageClass.call(this);'會完成這項工作。而$ .proxy()'適用於需要通過預定義範圍傳遞函數的引用(這裏不是這種情況)。 – zerkms