是否可以更改现有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()">
答案 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。)