展开全部
不知道这算不算是HTML label标签的bug,之所以alert了两次,是因为你在给label控件注册事件的时候,它里面的input 控件好像也被注册上了同样的事件。
javascript里事件捕获的时候,是从外到内进行传递的,所以这两次alert第一次是在label控件上触发的,第二次是在input控件上触发的,最奇葩的就是明明只给外层的label注册的事件处理程序,但运行是外层lable跟内层input居然有了,所以会运行两次。 你可以这样测试看一下:
<html>
<head>
<script language="javascript">
function Window_Load(){
var oBtn = document.getElementById("bbb");
oBtn.onclick = function(){
var src = event.srcElement || event.target;
alert(src.tagName);
}
}
</script>
</head>
<body onload="Window_Load();">
<label id="bbb">
<input id="text1" type="checkbox" />自动登录
</label>
</body>
</html>
具体为什么会这样,我查遍了资料,也没找到原因!也许就是label控件的一个bug吧,用div里面套input checkox 就不会有这个问题。
建议把input控件(复选框)放到label控件外面。感觉你可能要实现的是,在点击label里的文字的时候,也能同时对复选框进行点选。 这时只需要给label标签里加个for属性,属性值对应复选框的ID就好了:
<html>
<head>
<script language="javascript">
function Window_Load(){
var oBtn = document.getElementById("text1");
oBtn.onclick = function(){
var src = event.srcElement || event.target;
alert(src.tagName);
}
}
</script>
</head>
<body onload="Window_Load();">
<input id="text1" type="checkbox" />
<label id="bbb" for="text1"> 自动登录 </label>
</body>
</html>
你可以测测看看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询