JAVASCRIPT DOM EVENT 初探

在项目中实验了一下 JAVASCRIPT ----  DOM  ----  EVENT

因为原先看过在父节点进行事件的捕捉,所以我也就来实验了一下。

因为接手的项目很不规范 ... 所以 ... 不说啦 ... 还是进入主题 ...

       结论是这样的 ,

使用 JS document.getElementById(“id”) .onclick = function(event){ /*** function body here ***/ } 来进行父节点事件绑定是可以捕捉到所有的子节点的 click事件的。

使用 JQUERY $(“#id”).bind(“click”,function(event))(){/*** function body here ***/}) 来进行父节点事件绑定有的时候不能够捕捉到子节点的  click 事件。

因为在这里原项目使用了第三方的 JQUERY 插件来渲染子元素 。很有可能就导致了功能冲突。我也是 DEBUG 了很久,最后还是决定使用 JAVASCRIPT 原生 DOM 来实现事件绑定的。在使用 JQUERY 的情况下不推荐使用 DOM 来完成 JQUERY 能够实现的功能。这样可能会破坏代码的可读性和美观程度。当你阅读代码的时候发现各种混乱的搭配,你会疯掉的。

  

所以以后在做类似父节点事件绑定的话,假如 JQUERY 事件绑定无效,就可以先使用 document.getElementById(“element_id”).onclick = function(event){

       /*** function body ***/

};

来进行事件的绑定,看看是否能成功。

 

 

关于 event.target event.currentTarget

Event.target指向的是实际触发事件的子元素。

Event.currentTarget指向的是绑定处理事件的父元素。

Return type 返回的是 html dom 元素,跟使用 document.getElementById 获得的元素是相同的。

 

可以使用 . 号析取操作符号来获得对应 HTML 元素的各项属性

 

另外就是关于事件捕捉和冒泡,基本上来说事件都是在冒泡阶段进行处理的,是通过事件流的方式,事件流不会因为处理事件的进行而中断。这也就是说假如在子节点和父节点都有相应的处理事件,则两个处理事件都会被触发到,因为事件流并没有被截断。

下面直接给出代码。

 

<script>

       window.onload = function(){

              //在父元素绑定事件,单击子元素查看 event.target event.currentTarget 的效果

              document.getElementById("tableRowsClick").onclick = function(event){

                     alert( "event.target = " + event.target.id);

                     alert( "event.currentTarget =" + event.currentTarget.id);

              }

             

              //在子节点也绑定事件看看事件流还能到父节点么

              document.getElementById("row_2").onclick = function(event){

                     alert("before father node capture!");

              };

       }

   </script>

 </head>

 

 <body id = "mainBody">

       <table id = tableRowsClick>

              <tr><td id = "row_1"> row_1 </td></tr>

              <tr><td id = "row_2"> row_2 </td></tr>

       </table>

 

 

大家可以自己看一下处理的结果 ..

即使子节点已经对 click 事件进行了处理但是事件流还是没有断。

当然事件流也是可以被人为截断的

可以通过 event.preventDefault() 来取消事件的默认行为

也可以通过 event.stopPropagation() 来取消事件进一步捕捉和冒泡

 

另外这份文档整理的事件比较早了。使用了 jquery bind() 函数来进行事件绑定。这样其实不是很好。推荐使用 delegate @屈小伟 。能够很方便的进行事件绑定而且逻辑也更加清晰。

 

Thank you for reading …

 

 

你可能感兴趣的:(JavaScript,dom,bind,event)