ie8 не хочет работать с which при событии onclick
Вот этот : fixEvent = function (e) { e = e || window.event; if (!e.which && e.button) { e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : (e.button & 4 ? 2 : 0) ); } return e; } .. или этот пример: function fixWhich(e) { if (!e.which && e.button) { // если which нет, но есть button... if (e.button & 1) e.which = 1; // левая кнопка else if (e.button & 4) e.which = 2; // средняя кнопка else if (e.button & 2) e.which = 3; // правая кнопка } } не работают в IE8 e.which при нажатие на левую клавишу выдает undefined, на правую - не реагирует никак Зато e.button при нажатие на левую клавишу выдает 0 ! Пример: <!DOCTYPE HTML> <html> <head> </head> <body> <input type="button" id="a" value="сработает в ie8"> <input type="button" id="b" value="не сработает в ie8"> <script> var a = document.getElementById("a"), b = document.getElementById("b"), fixEvent = function (e) { e = e || window.event; if (!e.which && e.button) { e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : (e.button & 4 ? 2 : 0) ); } return e; }; a.onmousedown = function (e) { e = fixEvent(e); if (e.which !== 1) { return; } alert("привет мир"); } b.onclick = function (e) { e = fixEvent(e); if (e.which !== 1) { return; // e.which в ie8 на левую клавишу мыши выдаст undefined } alert("привет мир"); } </script> </body> </html> |
док тайп е?
|
Цитата:
|
Баг в Firefox (v18.0 , os x) c CSS-свойствами:
Некорректно работает transition когда: - появляется правило у элемента, которое нельзя сделать переходным - элемент имеет position:fixed.. Пример: Есть группа элементов со свойством transition. body, #a, #b, #x, #y { -webkit-transition: all .1s; -ms-transition: all .1s; -o-transition: all .1s; -moz-transition: all .1s; transition: all .1s; } Некоторые из этих элементов имеют position: fixed (это одна из причин бага)! Эти элементы, получают класс со свойствами, которые можно плавно изменить (margin, left). Но одновременно с этим body получает свойство overflow c значением hidden (св-во может быть любое, главное - которое нельзя плавно изменить) Результат: плавный переход не срабатывает в firefox Решение проблемы: 1. Можно задать небольшой интервал для назначения неизменяемого св-ва для body: window.setTimeout(function () { document.body.style.overflow = "hidden"; }, 1); 2. Убрать у элементов, которые участвуют в плавном переходе, position: fixed Суть бага мне еще до конца не ясна(( Демо бага http://test.hnoe.ru/ В левой части браузера вкладка, во всех браузерах кроме firefox она анимированная |
Цитата:
e.which = e.button !== 2 ? e.button >> 2 : 2; но сейчас уже не уверен, что она работает... Я тебе честно скажу: создал тему, чтобы запостить баг. Но, немного поковырявшись в проблеме, понял, что дело не в браузере :no: |
Цитата:
if (!e.which && e.button) { e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : (e.button & 4 ? 2 : 0) ); } и с фиксом не работает |
Цитата:
|
nerv_,
фикс верный, проверял в отладчике, и тем более он работает с mousedown! Проблема именно в onclick. Возможно в старых ie для этого события специально не предусмотрен e.which (e.button) |
FF18 неправильно обрабатывает у блока text-align:left(устанавливает его в justify) если у списка элементов внутри блока есть :first-letter.
Вроде правильно описал баг. Фичей не могу это назвать, бесит. |
Кстати, немного не в тему, но вижу что и dmitry111, и nerv_, предложили какие то непонятные решения для определения e.button.
Вот что используется в одной библиотечке (это фикс значения e.button): if (e.preventDefault) { return e.button; } // old IE else { return {1:0, 2:2, 4:1}[e.button]; } Помоему очень наглядно и лично я поразился простоте и необычности решения. Думаю этот прием можно кое-где где использовать для замены if-ов и switch-ей. Сорри если сорвал давно сорванные уже покровы. Да, я вкурсе, идея использовать объект в роли ассоциативного массива не очень нова, но вот использовать объект без объявления перменной в таком вот виде не всегда в голову прийдет. |
Часовой пояс GMT +3, время: 16:52. |