2017-12-26 19 views
0

段落を上に移動して変更しようとしました。innerHTMLをパラメータで変更する

HTML

<p id="foo"> Hello world! </p> 

Javascriptを

var foo = document.getElementById("foo"); 
foo.addEventListener("mouseover", ChangeText("Goodbye world!")); 

function ChangeText(s) { 
    this.innerHTML = s; 
} 

しかし、段落がホバーに変更されません。パラメータが省略され、文字列が以下のように直接入力されると、動作します。どうして?

var foo = document.getElementById("foo"); 
foo.addEventListener("mouseover", ChangeText); 

function ChangeText() { 
    this.innerHTML = "Goodbye world!"; 
} 

答えて

1

addEventListenerは関数を2番目の引数として指定します。したがって、引数を指定して関数を呼び出すと、次のように書くことができます。

foo.addEventListener("mouseover", function(event){ 
     ChangeText("Goodbye world!",event.target) 
    }); 

function ChangeText(s,target) { 
    target.innerHTML = s; 
} 
+0

残念ながらこれも私にとっては役に立ちません。 – Robbebeest

+1

'this'値は' foo'を参照しません。 'ChangeText'を更新して' foo.innerHTML'を設定するか、[Function.prototype.call()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)を使用してください。 /関数/呼び出し) 'foo'(' ChangeText.call(foo、 "Goodbye world!") ')に設定された' this'関数を呼び出します。 –

関連する問題