Используйте jQuery Event во встроенном обработчике JavaScript - PullRequest
2 голосов
/ 17 сентября 2010

Я работаю над проектом и ограничен обработкой событий JavaScript через встроенные обработчики, такие как onclick и onchange.Однако мне нужно, чтобы мои обработчики были кросс-браузерными.Я привык использовать 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 Ответ

2 голосов
/ 17 сентября 2010

Если вы извлечете исходный код jQuery, вы увидите, что создание объекта Event мало что дает.Все, что он делает, это задает свойства originalEvent, type и timeStamp.Что вы действительно хотите сделать, так это «исправить» объект по умолчанию, чтобы он работал в некотором кросс-браузерном режиме, правильно:

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

event.fix не находится в публичном интерфейсе для jQuery, но, похоже,сделать работу ...

Проверьте это здесь: http://jsfiddle.net/ryleyb/UdJqV/1/

...