Правильно ли это поведение?
Поскольку attr('onsomeevent', ...)
никогда не было способом добавления прослушивателей событий, никогда не поддерживалось и работает только в Firefox по совпадению, да.
А почему?
Поскольку IE до версии 8 не может напрямую получать / устанавливать атрибуты HTML. Вызов setAttribute()
только устанавливает свойство DOM с тем же именем. А свойство onclick
не является строковым свойством, поэтому вы не можете записать в него строку. Он принимает только значение функции.
jQuery attr()
запутывает проблему, вызывая attr
, но фактически записывая свойства DOM, а не атрибуты HTML ... но используя имена атрибутов HTML (например, class
) вместо имен свойств DOM (например, className
).
( За исключением случаев, когда он не , потому что в некоторых случаях он пытается скрыть разницу с помощью атрибутов. За исключением , который все еще не работает все время в IE для причина выше. Это не один из самых гордых моментов в jQuery.)
Так или иначе, в общем случае JavaScript в строке - это запах кода . Лучший способ продвижения вперед для jQuery и современного JavaScript в целом - использовать вместо этого функциональные объекты (возможно, встроенные function() { ... }
выражения).