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

Javascript 不同浏览器中表行上的mousedown事件处理程序,javascript,dom,cross-browser,Javascript,Dom,Cross Browser,我希望能够通过在命名表的每一行上注册mousedown事件从表中选择一行(请参见代码)。我正在Firefox 14.0、Chrome 20.0.1132.47和IE8(用于测试)中进行测试 在事件处理程序中,我将元素的类型(标记名)写入控制台,希望每次都是TR。这与Firefox中的预期一样,但Chrome和IE返回TD,即使处理程序已在TR上注册 <script> var myFuncs = { // generic stop event bubbling up any fu

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

在事件处理程序中,我将元素的类型(标记名)写入控制台,希望每次都是
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>

var myFuncs={
//进一步冒泡的通用停止事件(DOM级别2和IE)
stopProp:功能(事件){
如果(!event)var event=window.event;
event.cancelBubble=true;
if(event.stopPropagation)event.stopPropagation();
},
//通用添加事件侦听器
addListener:函数(elt、evt、listener){
如果(文件附件){
elt.attachEvent(“on”+evt,侦听器);
}
否则{
elt.addEventListener(evt,listener,false);
}
},
//用于处理标记上的mousedown事件的函数
handleMousedown:功能(evt){
myFuncs.stopProp(evt);
elt=(window.event)?window.event.src元素:evt.currentTarget;
console.log(elt.tagName);
},
//将事件侦听器附加/添加到命名表中的元素
registerEvts:function(){
var tab=document.getElementById(“dataGrid”);
var rows=tab.getElementsByTagName(“tr”);
对于(var ix=0;ix

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

我使用了jquery.on,它在规范行为方面做了大量工作。此外,它实际上是在表(或文档)级别注册事件处理程序,然后根据CSS选择器匹配事件,因此您只有一个事件函数。感谢Robert,我可能会继续使用jquery,但目前我正试图了解浏览器之间行为的差异。这是IE和Chrome中的非标准行为,还是我的代码不够具体?通过使用代码,我发现Chrome实际上模拟了DOM 2和IE事件模型,即它定义了document.attachEvent以及addEventListner。因此,我在myFuncs.addListener中的测试迫使Chrome表现得像IE一样。我遇到了类似的问题,当所有的解决方案似乎都需要jquery时,我觉得真的很难过。。。