为什么alert了两次

代码alert了两次,为什么,如图... 代码alert了两次,为什么,如图 展开
 我来答
zhfto
2013-07-13 · TA获得超过563个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:215万
展开全部

    不知道这算不算是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>

你可以测测看看。



推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式