Javascript:带“的函数;这";未定义

Javascript:带“的函数;这";未定义,javascript,Javascript,我是Javascript新手,正在尝试编写一个函数来更改某些文本的颜色,但是“this”始终作为未定义返回,并且不更改文本的颜色。 这是代码,我非常感谢您的帮助 <h1> <ul><div class="info" id="info" onclick="this.style.color= '#9DC8BA'">INFO </div></ul> <ul><div class="menu" id="

我是Javascript新手,正在尝试编写一个函数来更改某些文本的颜色,但是“this”始终作为未定义返回,并且不更改文本的颜色。 这是代码,我非常感谢您的帮助

<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>

必须将DOM元素的引用传递给函数

<div class="menu" id="menu" onclick="test1(this)">/div>
function test1(obj) {
   obj.style.color= '#9DC8BA';
}
旁注:类的名称和div的id似乎是相同的,这不是一个好的做法。
始终记住类对应一组元素,ID对应唯一的元素。

必须将DOM元素的引用传递给函数

<div class="menu" id="menu" onclick="test1(this)">/div>
function test1(obj) {
   obj.style.color= '#9DC8BA';
}
旁注:类的名称和div的id似乎是相同的,这不是一个好的做法。
请始终记住,类对应于一组元素,ID对应于唯一元素。

test1函数不是作为上下文在div元素上执行的,而是在窗口上执行的

这样做:

onclick="test1(this)"
在功能上:

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

test1函数不是作为上下文在div元素上执行,而是在窗口上执行

这样做:

onclick="test1(this)"
在功能上:

function test1(div) {
    div.style.color = '#9DC8BA';
}
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>
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>

在html中编写
onclick
时,它会生成新函数本身。 在您的例子中,它类似于
function(){test1()}
此函数中的此
是您需要的,但是
test1中的
未定义

您可以使用
this
作为
test1

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

function test1(obj) {
test1

... onclick="test1(this)" ...
或者从javascript中设置函数
onclick
属性,如:

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

在这种情况下,
test1中的这个
正是您所需要的。

当您在html中编写
onclick
时,它会自己生成新函数。 在您的例子中,它类似于
function(){test1()}
此函数中的此
是您需要的,但是
test1中的
未定义

您可以使用
this
作为
test1

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

function test1(obj) {
test1

... onclick="test1(this)" ...
或者从javascript中设置函数
onclick
属性,如:

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

在这种情况下,
测试1中的这个
正是您所需要的。

非常感谢您,普拉布,我很抱歉为这么简单的解决方案浪费您的时间,但谢谢您。他不必非得
。还有另一种解决方法。@Epsilon:很抱歉我错过了一些东西。@Prabhu你的解决方法非常有效,只是有另一种方法,这就是我要说的。如果您从JavaScript设置函数,那么
这个
将起作用。非常感谢您,Prabhu,我很抱歉为这么简单的解决方案浪费您的时间,但谢谢您。他不必
必须
。还有另一种解决方法。@Epsilon:很抱歉我错过了一些东西。@Prabhu你的解决方法非常有效,只是有另一种方法,这就是我要说的。如果您从JavaScript设置函数,则
将起作用。您得到解决方案了吗?将
=test1()
更改为
=test1(this)
,将
函数test1()
更改为
函数test1(div){div.style.color='#CCC'}
。您的标记无效,div不能是UL的子级。在非严格模式下,这永远不会是未定义的。如果未在调用中或通过绑定进行设置,则默认为全局(浏览器中的窗口)对象。控制台可能正在抱怨window.style未定义。您得到解决方案了吗?将
=test1()
更改为
=test1(this)
,将
函数test1()
更改为
函数test1(div){div.style.color='#CCC'}
。您的标记无效,div不能是UL的子级。在非严格模式下,这永远不会是未定义的。如果未在调用中或通过绑定进行设置,则默认为全局(浏览器中的窗口)对象。控制台可能正在抱怨window.style未定义。这不是“上下文”,而是一个参数。;-)我解释了当前的问题。作为解决方案,上下文将作为参数传递。这不是“上下文”,而是的一个参数。;-)我解释了当前的问题。作为解决方案,上下文将作为参数传递。