2014-10-09 74 views
0

我是Javascript新手,試圖編寫一個函數來改變某些文本的顏色,但是「this」會一直返回爲undefine,並且不會更改文本顏色。 下面是代碼,我非常感謝一些幫助。Javascript:帶有「this」的函數undefined

<h1> 
    <ul><div class="info" id="info" onclick="this.style.color= '#9DC8BA'">INFO 
    </div></ul> 
    <ul><div class="menu" id="menu" onclick="test1()"<!--this is where the problem is-->MENU</div></ul> 

這裏是JavaScript的

function test1() { 
this.style.color= '#9DC8BA'; 
} 
+0

您是否得到了解決方案? – Amy 2014-10-09 06:29:34

+0

將'= test1()'更改爲'= test1(this)',並將'function test1()'更改爲'function test1(div){div.style.color ='#CCC'}'。 – MrROY 2014-10-09 06:33:55

+0

您的標記無效,DIV不能成爲UL的子項。在非嚴格模式下,* this *永遠不會被定義。如果沒有在調用中設置,或者通過* bind *,它將默認爲全局(瀏覽器中的窗口)對象。控制檯可能抱怨* window.style *未定義。 – RobG 2014-10-09 07:14:56

回答

3

你要的DOM元素的引用傳遞給函數

<div class="menu" id="menu" onclick="test1(this)">/div> 
在上面的html

,這是指當前的DOM元素,它ID菜單的DIV。

然後參照和修改DOM函數內部

function test1(obj) { 
    obj.style.color= '#9DC8BA'; 
} 

旁註:你似乎有對class和id的DIV,這是不是一個好的做法同一個名字。永遠記得Class對應於一組元素,ID對應於唯一元素。

+0

非常感謝Prabhu,我很抱歉用這麼簡單的解決方案浪費你的時間,但是謝謝你。 – TJ5897 2014-10-09 06:29:19

+0

他不'必須'。還有另一種解決方案。 – Epsilon 2014-10-09 06:37:04

+0

@Epsilon:對不起,我錯過了這裏的東西。 – 2014-10-09 06:38:59

1

test1函數不是作爲上下文在div元素上執行,而是在窗口上執行。

做到這一點:

onclick="test1(this)" 

在功能:

function test1(div) { 
    div.style.color = '#9DC8BA'; 
} 
+0

*此*不是「上下文」,它是[*執行上下文*](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-execution-contexts)的參數。 ;-) – RobG 2014-10-09 07:19:18

+0

我解釋了當前的問題。作爲解決方案,上下文將作爲參數傳遞。 – 2014-10-09 08:13:13

0

HTML代碼

<h1> 
    <ul><div class="info" id="info" onclick="this.style.color= '#9DC8BA'">INFO 
    </div></ul> 
    <ul><div class="menu" id="menu" onclick="test1(this)">MENU</div></ul> 
</h1> 

JavaScript代碼:

function test1(obj) 
{ 
    obj.style.color= '#9DC8BA'; 
} 
0

當你在html中寫入onclick時,它自己產生新的函數。 在你的情況下,它就像function(){test1()}this裏面這個函數是你需要的,但this裏面的test1是未定義的。

您可以使用this作爲test1

... onclick="test1(this)" ... 

參數和JS

function test1(obj) { 

而且在test1

或者設置功能onclick屬性使用obj而不是this從JavaScript這樣的:

var menu = document.getElementById('menu'); 
menu.onclick = test1; 

在這種情況下this裏面的test1將正是你所需要的。