在下面的代码HTML +脚本中,
setAttribute(...)
在页面加载后附加事件处理程序。 getAttribute(...)
但是,处理程序不会触发。
下面的代码段有什么问题?
<HTML>
<BODY onload="loader();">
<table>
<tbody>
<tr>
<td id="myId">FirstColumn</td>
<td id="otherId">SecondColumn</td>
<td id="lastId">Balderdash</td>
</tr>
</tbody>
</table>
</BODY>
<script language="javascript">
function loader(){
document.getElementById('myId').setAttribute('onmouseover','showMessage("'+document.getElementById('otherId').innerHTML+'");');
alert(document.getElementById('myId').getAttribute('onmouseover'));
document.getElementById('myId').setAttribute('onmouseout','alert(\"'+document.getElementById('otherId').innerHTML+'\");');
alert(document.getElementById('myId').getAttribute('onmouseout'));
document.getElementById('lastId').setAttribute('onmouseout','alert("hohoho");');
alert(document.getElementById('lastId').getAttribute('onmouseout'));
function showMessage( aMessage ){
alert(aMessage);
}
</script>
</HTML>
答案 0 :(得分:1)
不要使用setAttribute
在DOM节点上设置事件处理程序。只需直接使用事件处理程序属性,并为其分配函数而不是字符串:
document.getElementById('myId').onmouseover = function() {
showMessage(document.getElementById('otherId').innerHTML);
};
答案 1 :(得分:0)
除了直接分配
e.g。
document.getElementById(...).onMouseOver = stuff;
function stuff(){//do the Deed};
代替
document.getElementById(...).setAttribute(...);
显然附加的事件处理程序可能接受任何参数。
我改变了我的处理程序签名以接受0个参数,并且它有效!