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, время: 00:43. |