<!DOCTYPE html>
<html>
<head>
<title> new document </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript">
window.onload = function(){
// 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
var trs=document.getElementsByTagName("tr");
console.log(trs);
for(var i=0;i<trs.length;i++){
console.log(i);
trs[i].setAttribute("onmouseover","msover(this)");
trs[i].setAttribute("onmouseout","msout(this)");
}
var as=document.getElementsByTagName("a");
for(var i=0;i<as.length;i++){
if (as[i].innerHTML="删除"){
as[i].setAttribute("onclick","this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode)");
}
}
var newlines = document.getElementsByTagName("input");
for(var i=0;i<newlines.length;i++){
if (newlines[i].value="添加一行"){
newlines[i].setAttribute("onclick","addline()")
}
}
}
function addline(){
var newl = document.createElement("tr");
newl.appendChild(document.createElement("td"));
newl.appendChild(document.createElement("td"));
var tda = newl.appendChild(document.createElement("td"));
newa= document.createElement("a");
newa.href="javascript:void(0);";
newa.innerHTML="delrow";
newa.setAttribute("onclick","this.parentNode.parentNode.remove();");
tda.appendChild(newa);
document.getElementsByTagName("tbody")[0].appendChild(newl);
}
// 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;
// 创建删除函数
</script>
</head>
<body>
<table border="1" width="50%" id="table">
<tr>
<th>学号</th>
<th>姓名</th>
<th>操作</th>
</tr>
<tr>
<td>xh001</td>
<td>王小明</td>
<td><a href="javascript:;" >删除</a></td> <!--在删除按钮上添加点击事件 -->
</tr>
<tr>
<td>xh002</td>
<td>刘小芳</td>
<td><a href="javascript:;" >删除</a></td> <!--在删除按钮上添加点击事件 -->
</tr>
</table>
<input type="button" value="添加一行" /> <!--在添加按钮上添加点击事件 -->
<script type="text/javascript">
function msover(x){
x.style.backgroundColor = "#ffffff";
}
function msout(x){
x.style.backgroundColor="#F2F2F2";
}
</script>
</body>
</html>为啥我这里的 msover() msout() 方法必须写在 body 里才能运行,而写在 head里的window.onload里就无法运行呢?
2 回答
stone310
TA贡献361条经验 获得超191个赞
关于作用域的问题,只要msover()和msout()放在全局作用域下,就可以执行,分析如下:
trs[i].setAttribute("onmouseover","msover(this)");当这个语句执行,相当于在HTML样式里直接添加事件;HTML下的<tr>就会变成这样 <tr onmouseover="msover(this)">;
当你的msover()方法放在全局变量中,<tr onmouseover="msover(this)">是能成功读取到msover()这个方法的,但是如果你放在局部作用域下;根据JS规则,外部是无法访问局部作用域下的方法,因此就无法识别msover();
放在window.onload=function(){}里也就相当于放在一个局部作用域中,外界就无法访问,所以写在window.onload内无法执行
添加回答
举报
0/150
提交
取消