2012-10-10 36 views
23

可能重複:
The current element as its Event function param傳遞 '這' 一個onclick事件

將這工作

<script type="text/javascript"> 
var foo = function(param) 
{ 
    param.innerHTML = "Not a button"; 
}; 
</script> 
<button onclick="foo(this)" id="bar">Button</button> 

,而不是這個?

<script type="text/javascript"> 
var foo = function() 
{ 
    document.getElementId("bar").innerHTML = "Not a button"; 
}; 
</script> 
<button onclick="foo()" id="bar">Button</button> 

第一種方法是否允許我從別處加載JavaScript來對任何頁面元素執行操作?

+2

詢問是否有*會起作用沒什麼意義。更好地測試你自己,並澄清你想要使用的命令,你不確定。 – hakre

回答

24

,你必須將工作的代碼,而是從全球範圍內,這意味着this指的是全局對象執行。

<script type="text/javascript"> 
var foo = function(param) { 
    param.innerHTML = "Not a button"; 
}; 
</script> 
<button onclick="foo(this)" id="bar">Button</button> 

您也可以使用非內聯替代,將附着在和它允許你從this訪問元素的特定元素上下文中執行。

<script type="text/javascript"> 
document.getElementById('bar').onclick = function() { 
    this.innerHTML = "Not a button"; 
}; 
</script> 
<button id="bar">Button</button> 
5

是的,第一種方法可以處理從其他地方調用的任何元素,因爲它將始終採用 目標元素,而不考慮id。

檢查此琴

http://jsfiddle.net/8cvBM/

12

您可以隨時調用不同的功能可按:foo.call(this);這樣你就可以使用函數內部this上下文。

實施例:

<button onclick="foo.call(this)" id="bar">Button</button>​

var foo = function() 
{ 
    this.innerHTML = "Not a button"; 
}; 
+0

太棒了!這有什麼缺點嗎? –

3

在JavaScript this始終指的是我們執行,或更確切地說,函數的「所有者」,到對象的功能是這樣的方法的。當我們在頁面中定義我們的忠實函數doSomething()時,它的所有者就是頁面,或者說,是JavaScript的窗口對象(或全局對象)。

How does the "this" keyword work?

+0

'this'是在調用時調用函數的對象。 JavaScript中沒有「所有者」的概念。如果該函數在不使用對象的情況下調用,那麼'this'就是全局對象(瀏覽器中的'window')。例如:'function f(){console.log(this); }; O = {A:F}; o.a(); var b = o.a; B();' – Pierre