2010-09-27 66 views
0

我在這樣的一個錨標記調用函數test(): -訪問屬性(本)給出了不確定的

<a class="link" onclick="test();">Hello</a> 

,我試圖訪問錨的類在功能測試()內: -

function test() 
{ 
    alert($(this).attr("class")); 
} 

但是這個警報undefined。我知道,打電話onclick=test(this);來代替,而具有下列功能的工作原理: -

function test(obj) 
{ 
    alert($(obj).attr("class")); 
} 

但是,我想沒有通過this訪問元素(該函數被調用)的性能。只需要能夠調用該元素的屬性(在其上調用該函數)get/set。可能嗎?這個怎麼做?

回答

1

在這種情況下,我們需要確保HTML元素擁有你想要點擊的函數。你實際做的是,你使用的onclick屬性只需要字符串參數,並完全忽略了其他一切。

爲了使HTML元素所有者的功能,您需要映射onclick屬性完全與您自己的自定義功能。在JavaScript中你做這樣的

element.onclick = doSomething; 

所以我們的代碼將會像

<div id="element">Click</div> 
<script> 
function doSomething(){ 
    this.style.color= "#000000" 
} 
document.getElementById("element").onclick = doSomething; 
</script> 

這裏是工作示例http://www.jsfiddle.net/VMCmb/1/。請致電http://www.quirksmode.org/js/this.html

+0

簡單的答案和不錯的鏈接...謝謝 – 2010-09-30 19:17:16

0

因爲「this」是Javascript中的一個特殊的自由變量:它由調用者的上下文綁定。 通過這是一個更好,更安全的工作方式。

3

this是「在其上調用此函數,對象」,所以對於foo.test()thisfoo內部test。如果您未指定對象,則因爲您正在調用(隱含地)window.test(),所以在您的代碼this === window中缺省爲window

忘記內在事件屬性。他們是醜陋的,不適合unobtrusive JavaScript

而是使用JavaScript來分配您的事件處理程序。 jQuery,你已經在使用,提供了很多方法來做到這一點,包括click。將想要調用的函數作爲參數傳遞給它。

jQuery('.link').click(test); 

當click事件觸發,這將現在稱之爲一個類似於HTMLElementNode.test(),而不是HTMLElementNode.onclick()所以this將是你想要的。

+0

對不起,我聽不懂。你能否解釋一下... – 2010-09-27 11:30:57

+0

好的+1現在更清楚了...... – 2010-09-30 19:17:59

0

您也可以使用此方法 -

通過這個作爲一個參數 -

<a class="link" onclick="test(this);">Hello</a> 

jQuery代碼將是 -

function test(obj) 
{ 
    alert($(obj).attr("class")); 
}