2010-09-17 52 views
2

我在一个项目上工作,仅限于通过内联处理程序(如onclickonchange)处理JavaScript事件。但是,我需要我的处理程序是跨浏览器的。我习惯于使用jQuery,但由于我不能使用$('#id').click(function() { ... })我在访问jQuery风格的事件时遇到了一些困难。在内联JavaScript处理程序中使用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

为什么绝对有必要做这个内联?你不能把script标签放在html的某个地方吗? – treeface 2010-09-17 16:27:21

回答

2

如果您查看jQuery源代码,您会发现创建Event对象的功能并不多。它所做的只是指定originalEvent,type和timeStamp属性。你真正想要做的是“修复”的默认对象在某种合适的跨浏览器的工作方式:

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

event.fix是不是在公共接口的jQuery,但似乎做的工作。 ..

看看这里:http://jsfiddle.net/ryleyb/UdJqV/1/

相关问题