我正在处理一个项目,并且仅限于通过onclick
和onchange
等内联处理程序处理JavaScript事件。但是,我需要我的处理程序是跨浏览器。我习惯使用jQuery,但由于我不能使用$('#id').click(function() { ... })
,我在访问jQuery风格的事件时遇到了一些困难。
例如,我想这样做:
<table>
<tr onclick="if (event.target.tagName.toLowerCase() !== 'td') return false; ...">
<td>...</td>
<td>...</td>
<td><a>...</a></td>
<td><a>...</a></td>
</tr>
</table>
基本上,此代码只应处理表中没有任何锚子元素的单元格的点击。
这在Firefox和Chrome以及任何使用W3C事件的浏览器中都可以正常使用。不幸的是,在IE中,它不起作用。
我想做的是:
if ($.Event(event).target.tagName.toLowerCase() !== 'td') return false; ...
对于onclick
处理程序,但是当您以这种方式在jQuery中包装事件时,它似乎不提供target
字段。
我做错了什么?
答案 0 :(得分:2)
如果你查看了jQuery源代码,你会发现创建一个Event对象并没有太大作用。它所做的只是指定originalEvent,type和timeStamp属性。你真正想做的是“修复”默认对象以某种跨浏览器方式工作:
$.event.fix(event).target.tagName.toLowerCase() !== 'td'
event.fix
不在jQuery的公共接口中,但似乎可以完成这项工作......