2012-10-10 10 views
23

可能性の重複:
The current element as its Event function paramonclickイベントに 'この' 渡す

うこの作品

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

ではなく、この?

最初のメソッドを使用すると、他の場所からjavacriptを読み込んで、任意のページ要素でアクションを実行できますか?

+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

あなたはいつも違ったfunciton呼び出すことができます。foo.call(this);この方法であなたは、関数内thisコンテキストを使用することができるようになります。

例:JavaScriptのthis

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

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

素晴らしい!これには何か欠点はありますか? –

3

は、常に私たちは関数がメソッドであるオブジェクトに、実行、またはむしろしている機能の「所有者」を指し、の。忠実な関数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

関連する問題