你好,举个例子,先说JavaScript中事件句柄函数的this和even.target。
由于JavaScript的事件模型中,事件触发开始,有一个捕获阶段和冒泡阶段(详见:关于JavaScript的addEventListener第三个参数的注记)。所以触发元素分为精准触发元素和不精准触发元素。例如,在下面的结构中:
<div class="outer" id="outer"> <div class="mid" id="mid"><input type="button" class="active" id="inner" value="inner">
</div></div>
假设三个相互嵌套的元素都有一个onclick点击事件句柄。那么当我点击按钮时触发点击事件,那么这个事件可以被这三个元素捕获,那么最内层的按钮元素,也就是我精确点击的元素,我称作:“精准触发元素”;相应的,剩下的两个就是“不精准触发元素”。
那么,由于触发事件句柄的回调函数中,第一个参数总是event实例,它有一个target的属性,指向的就是“精准触发元素”,而在“不精准触发元素”的回调函数中,this指向的就是元素本身,而event.target指向的就是那个“精准触发元素”,二者可以区分。
可以想见,在“精准触发元素”的事件函数内部,应该有this===event.target,而事实也确实如此。
如果用原生JavaScript代码或者jQuery都可以验证:
//原生JavaScriptdocument.getElementById("inner").onclick=function(event){ console.log(this===event.target)
} //jQuery+匿名函数
$("#inner").click(function(event){ console.log(event.target===this)
})
但是当使用箭头函数验证时要格外注意。例如,下面代码验证的是错误的,因为箭头函数的this指向的不是本元素,而是全局变量window:
//错误$("#inner").click((event)=>{ console.log(event.target===this)
})
我们需要给它手动绑定:
//正常$("#inner").click((function(){ return (event)=>{ console.log(event.target===this)
}
}).call($("#inner")[0]))
除了这2个,还有下面这些
传入的参数,一般是 函数名 参数多写在函数调用的。
希望采纳
经过测试,可行!下面是改好的代码!
<html>
<head><title>导航树例子</title>
<script language="javascript" type="text/javascript" >
function dashu(e){
if(!document.getElementById) return
if(!e) var e=window.event
whicklink=(e.target)?e.target.id:e.srcElement.id
menu=document.getElementById(whicklink+"menu")
boolean=(menu.style.display=="none")
obj=document.getElementById(whicklink)
objname=obj.firstChild.nodeValue.substring(3)
if(boolean){
menu.style.display="block"
obj.firstChild.nodeValue="[-]"+objname
}
else{
menu.style.display="none"
obj.firstChild.nodeValue="[+]"+objname
}
}
function cheshi(){
document.write("wodeshijiebushimeng")
}
</script>
</head>
<body>
<ul>
<li><a id="yonghu" href="#">[+]用户管理</a><!--主菜单-->
<ul id="yonghumenu"><li><a href="#">修改密码</a></li>
<li><a href="#">注销账号</a></li>
<li><a href="#">查看密码</a></li>
</ul>
</li>
<li><a id="bumen" href="#">[+]部门管理</a>
<ul id="bumenmenu"><li><a href="#">修改密码</a></li>
<li><a href="#">注销账号</a></li>
<li><a href="#">查看密码</a></li>
</ul>
</li>
<li><a id="xinxi" href="#">[+]信息管理</a>
<ul id="xinximenu"><li><a href="#">修改密码</a></li>
<li><a href="#">注销账号</a></li>
<li><a href="#">查看密码</a></li>
</ul>
</li>
</ul>
<form name="myform">
<input type="button" name="mybutton" id="mybutton" >
</form>
</body>
</html>
<script>
document.getElementById("yonghu").onclick=dashu
document.getElementById("bumen").onclick=dashu
document.getElementById("xinxi").onclick=dashu
document.getElementById("mybutton").onclick=cheshi
</script>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)