使用dojo附加事件的三种方法。究竟有什么区别?

时间:2010-03-25 13:40:55

标签: javascript events dojo

这里的差异只是各种语法糖还是有理由使用一种方法而不是另一种方法?它们都有效,而且有点混淆这个 evt.currentTarget 之间的区别是什么?

CSS

#reportDetails table tr:hover td,
#reportDetails table tr.hover td  {
    background: #aae4e2;
    color: #333333;
}

示例html

<div id="reportDetails">
   <table>
     <tr>
       <td> something</td>
       <td> soemthing else</td>
     </tr>
     <tr>
        <td> something2</td>
        <td> soemthing else2</td>
     </tr>
   </table>
 </div>

dojo.behavior脚本

dojo.require("dojo.behavior");  
if (dojo.isIE <= 6) {
 dojo.behavior.add({
  '#reportDetails tr': {
   onmouseover: function(evt){ dojo.addClass(evt.currentTarget, "hover");},
   onmouseout: function(evt){dojo.removeClass(evt.currentTarget, "hover");
   }
  }
 });
}
dojo.behavior.apply();

dojo.query forEach script

    if (dojo.isIE <= 6) {
 dojo.addOnLoad(function() {
  dojo.query("tr", "reportDetails").forEach(function(node){ 
   node.onmouseover=function(){dojo.addClass(node,"hover");}
   node.onmouseout=function() {dojo.removeClass(node,"hover");}
   }
  });
 });
}

dojo.query直接参与活动

    if (dojo.isIE <= 6) {
 dojo.addOnLoad(function(){
  dojo.query("tr", "reportDetails")
  .onmouseover(function(evt){dojo.addClass(evt.currentTarget, "hover");})
  .onmouseout(function(evt){dojo.removeClass(evt.currentTarget, "hover");});
 });
}

我假设 evt.currentTarget 节点都可以用这个替换,并且仍然有用。我相信2和3之间没有真正的区别,但第一个可能实际上使用了不同的方法。

1 个答案:

答案 0 :(得分:0)

简而言之:没有什么不同。它们都按预期进行。

使用最方便的方式。


this指的是当前执行的函数的所有者。它与词汇语境不同。因此,您无法将nodeevt替换为this