不同浏览器中表行的mousedown事件处理程序

时间:2012-07-10 15:11:05

标签: javascript dom cross-browser

我希望能够通过在命名表的每一行上注册mousedown事件来从表中选择一行(请参阅代码)。我正在测试Firefox 14.0,Chrome 20.0.1132.47和IE 8(用于测试)。

在事件处理程序中,我将元素类型(标记名称)写入控制台,每次都期望它为TR。这在Firefox中可以正常工作,但Chrome和IE返回TD,即使处理程序已在TR上注册。

<script>
var myFuncs = {
   // generic stop event bubbling up any further (DOM level2 and IE)   
   stopProp: function (event){
      if (!event) var event = window.event;
      event.cancelBubble = true;
      if (event.stopPropagation) event.stopPropagation();
   },
   // generic add event listener   
   addListener : function(elt,evt,listener){
      if (document.attachEvent){
         elt.attachEvent ("on"+evt,listener);
      }
      else {
         elt.addEventListener (evt,listener,false);
      }
   },
   // the function that is supposed to handle mousedown events on <tr> tags
   handleMousedown : function(evt) {
      myFuncs.stopProp(evt);
      elt = (window.event) ? window.event.srcElement : evt.currentTarget;
      console.log(elt.tagName);
   },
   // attach/add event listener to <tr> elements in named table
   registerEvts : function(){
      var tab = document.getElementById("dataGrid");
      var rows = tab.getElementsByTagName("tr");
      for (var ix=0; ix < rows.length; ix++){
         myFuncs.addListener (rows[ix],"mousedown",myFuncs.handleMousedown);
      }
   }
}

window.onload = myFuncs.registerEvts;
</script>

还有其他人遇到过这个问题吗?它导致问题,因为我随后必须测试它是否是我正在处理的行或单元格。

0 个答案:

没有答案