为什么onmouseover和onclick不能同时设置div样式以及如何重置onclick设置样式而不会丢失onmouseover?

时间:2013-10-22 08:16:12

标签: javascript html onclick styles onmouseover

首先,我必须说我处于非常基本的编程水平。这些问题的答案可能对某些人来说非常明显,但我想不出将所有这些问题放在一起的方法。提前谢谢。

我有这个HTML代码:

<div id="vectores" class="categoria" onclick="this.style.color='#000'; this.style.textDecoration='underline'; mostraVectores('vectores0','vectores')" onmouseover="this.style.color='#000'; this.style.textDecoration='underline'" onmouseout="this.style.color='#999'; this.style.textDecoration='none'">Tema 1. Mec&aacute;nica vectorial</div>
    <div id="vectores0" class="subcategoria"></div>

我在这里使用'onclick'来改变样式“永久”,因为我希望它是一个“菜单选项”,我希望它能触发这些功能,但也要改变它的外观以便它可以很容易被告知它是否被选中。我正在使用'onmouseover'让用户始终知道指针“即将选择”(菜单有更多选项)。

问题似乎是他们不会一起工作。我想这只是因为一旦'onmouseover'设置了新样式,如果第二个事件(onclick)要求,编译器就不会再为div设置相同的样式。

以下是该课程的CSS代码:

.categoria{
color:#999;
font-weight:bold;
padding:2px;
padding-left:10px;
cursor:pointer;
}

然后我想使用单独的javascript页面和这样的函数来改变样式“永久”:

function mostraVectores(cosa1,cosa2){

document.getElementById(cosa1).style.display="block";

document.getElementById('equilibrio').style.color="#999";
document.getElementById('estructuras').style.color="#999";
document.getElementById('centros').style.color="#999";
document.getElementById('momento').style.color="#999";
document.getElementById('inercia').style.color="#999";
document.getElementById('rozamiento').style.color="#999";

document.getElementById('equilibrio').style.textDecoration="none";
document.getElementById('estructuras').style.textDecoration="none";
document.getElementById('centros').style.textDecoration="none";
document.getElementById('momento').style.textDecoration="none";
document.getElementById('inercia').style.textDecoration="none";
document.getElementById('rozamiento').style.textDecoration="none";

document.getElementById(cosa2).style.color="#000";
document.getElementById(cosa2).style.textDecoration="underline";

}

在这里你可以看到还有其他的“菜单选项”我想变成灰色而没有下划线(因为它们最初是根据css),以防这个功能在其他人之后执行,所以当用户从一个主题更改为另一个主题时,用户不会以两个“类似选择”的菜单选项结束。问题是通过这种方式“重置”样式'onmouseover / onmouseout'在div中停止工作。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要的方法是使用CSS :hover并在单击时指定一个类。

HTML

<div id="vectores" class="categoria" onclick="mostraVectores('vectores0','vectores')">Tema 1. Mec&aacute;nica vectorial</div>
    <div id="vectores0" class="subcategoria"></div>

CSS

.categoria {
    color: #999;
    font-weight: bold;
    padding: 2px;
    padding-left: 10px;
    cursor: pointer;
}

.categoria:hover { /* This is applied on mouseover and removed on mouseout */
    color: #000;
    text-decoration: underline;
}

.categoria.active { /* Not sure what you want when clicked */
    color: #900;
    text-decoration: underline;
}

JS

function mostraVectores(cosa1,cosa2){
    //add this to your function
    this.className += " active";