在内联JavaScript处理程序中使用jQuery Event

时间:2010-09-17 16:00:19

标签: jquery events inline

我正在处理一个项目,并且仅限于通过onclickonchange等内联处理程序处理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字段。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果你查看了jQuery源代码,你会发现创建一个Event对象并没有太大作用。它所做的只是指定originalEvent,type和timeStamp属性。你真正想做的是“修复”默认对象以某种跨浏览器方式工作:

$.event.fix(event).target.tagName.toLowerCase() !== 'td'

event.fix不在jQuery的公共接口中,但似乎可以完成这项工作......

请在此处查看:http://jsfiddle.net/ryleyb/UdJqV/1/