2010-09-17 49 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/

相關問題