动态更改onmouseover或onmouseout以调用不同的函数

时间:2010-10-15 22:49:18

标签: javascript css

是否可以更改现有onmouseover或onmouseout事件调用的函数?对于以下示例,我有一种方法让ChangeItemAEvent将“ItemA”onmouseover函数从ChangeColor()更改为ChangeColorBack()吗?目前我需要声明一个我认为不优雅的全新函数(),因为我应该能够调用现有函数时重复代码。

的javascript:

function ChangeColor(elementid)
{
  document.getElementById(elementid).style.background = "Orange";
  document.getElementById(elementid).style.color = "Black";
}

function ChangeColorBack(elementid)
{
  document.getElementById(elementid).style.background = "Black";
  document.getElementById(elementid).style.color = "White";
}

function ChangeItemAEvent()
{
  document.getElementById("ItemA").onmouseover = function() {

    document.getElementById("ItemA").style.background = "Black";
  document.getElementById("ItemA").style.color = "White";

  };
}

HTML:

<span id="ItemA" onmouseover="ChangeColor(this.id)">
<button id="ButtonB" onclick="ChangeItemAEvent()">

2 个答案:

答案 0 :(得分:8)

试试这个

function ChangeItemAEvent()
{
    document.getElementById("ItemA").onmouseover = function() {ChangeColorBack(this.id)};
}

答案 1 :(得分:2)

  

是否可以更改现有onmouseover或onmouseout事件调用的函数?

是的,通过使用函数值写入DOM element.onmouseover属性。这可以是函数名称或内联函数表达式。

如果您通过写入事件处理程序属性(或添加事件侦听器)来执行所有脚本编写,则可以利用指向该元素的this并避免传递ID,这样可以更轻松:

<span id="ItemA">
<button type="button" id="ButtonB">

<script type="text/javascript">
    function ChangeColor() {
        this.style.background= 'orange';
        this.style.color= 'black';
    }

    function ChangeColorBack(elementid) {
        this.style.background= 'black';
        this.style.color= 'white';
    }

    document.getElementById('ItemA').onmouseover= ChangeColor;
    document.getElementById('ButtonB').onclick= function() {
        document.getElementById('ItemA').onmouseover= ChangeColorBack;
    };
</script>

然而,对于这种悬停和选择工作,通常最好使用状态变量或CSS而不是重新分配事件处理程序。例如:

#ItemA:hover { background: orange; color: black; }
#ItemA.selected:hover { background: black; color: white; }

document.getElementById('ButtonB').onclick= function() {
    var a= document.getElementById('ItemA');
    a.className= a.className==='selected'? '' : 'selected';
};

(某个范围内的:hover在IE6中不起作用,因此如果您需要使该浏览器悬停突出显示,则必须添加onmouseover / mouseout代码或删除.hover className。)