Баг в Опере (select и onclick)
Обнаружил следующий баг в Опере (версия 12.12 на Windows 7 x64): если с клавиатуры менять select, то почему-то срабатывает событие onclick.
Живой пример можно увидеть здесь. Реально ли как-то обойти этот баг? |
странно, по твоей ссылке что ты дал, так и происходит, но этого нет например здесь:
Нажмите на клавиатуре стрелку вверх или вниз.<br /><br />
<select name="" id="select">
<option value="">11111111111</option>
<option value="">22222222222</option>
<option value="" selected>33333333333</option>
<option value="">44444444444</option>
<option value="">55555555555</option>
</select>
<script type="text/javascript">
document.getElementById('select').focus();
document.onclick = function(e) {
alert('Сработало событие onclick при изменении селекта!');
}
</script>
И так же не удалось это воспроизвести локально на компе. Видимо на сайте http://codepen.io/ что-то явно модифицируется в коде. |
и тут не воспроизводится: http://learn.javascript.ru/play/VSqSjc
|
:) Если кликнуть на элементы рядом - тож срабатывает - чот замудрено
И фокус там как то лишний для чистоты эксперимента |
Цитата:
Цитата:
Но лично мне не удалось это воспроизвести локально. Это скорее не баг оперы, а баг той песочницы |
В том-то и дело, что у меня баг срабатывает и локально с моего компа. Может причина в каких-то юзер-скриптах или виджетах?
Цитата:
Получается, что че-то не так в моей Опере. |
Цитата:
http://hostjs-mybb2011.narod.ru/Dimox.htm У меня срабатывает в Опере Срабатывает если даж если document.getElementById('select').focus(); убрать и выставить фокус по таб и нажать вверх=вниз |
Отключил все юзер-скрипты и расширения и перезагрузил Оперу - все равно бажит.
|
ну хз.. у меня не воспроизводится, вот Опера у меня ну и система:
![]() Хотя опера пишет платформа win32 |
devote,
У меня 32 ХP2 http://s3.uploads.ru/NmCFS.jpg |
devote, у меня абсолютно то же данные. Win32 - это разрядность самой Оперы, а не Винды.
Deff, реально как-то обойти этот баг? |
Dimox,
Ну костыль мон приделать - ток смысл - может иначе построить ? |
По-другому никак, document.onclick обязательно нужен.
|
<!DOCTYPE HTML>
<html>
<head>
<style>
body{
width:100%;
}
</style>
</head>
<body style="padding-top:200px;width:100%;text-align:center">
<select name="" id="select">
<option value="">11111111111</option>
<option value="">22222222222</option>
<option value="" selected>33333333333</option>
<option value="">44444444444</option>
<option value="">55555555555</option>
</select>
<script>
document.getElementById('select').focus();
document.onclick = function(e) {if(Key){
alert('Сработало событие onclick!');
}}
var Key = true;
document.getElementById('select').onchange = function() {
Key = false; //Запрет onclick на время смены селекта
setTimeout('Key = true',40)
}
</script>
</body>
</html>
|
Большое спасибо!
|
Deff,
странный костыль, хотя можно было сделать проще:
<select name="" id="select">
<option value="">11111111111</option>
<option value="">22222222222</option>
<option value="" selected>33333333333</option>
<option value="">44444444444</option>
<option value="">55555555555</option>
</select>
<script>
document.onclick = function(e) {
if ((e&&e.target||{}).nodeName !== "OPTION") {
alert('Сработало событие onclick!');
}
}
</script>
|
devote,
Cам удивилсо - ксать проверил еще у трёх юзеров с ХР Ксать если ставить тестовый контент внутрь нормальной сайтовой обёртки - эффекта не наблюдаю (*Не голый тест Вот сюда ставил http://designforum.bestff.ru/ |
а еще лучше так:
<select name="" id="select">
<option value="">11111111111</option>
<option value="">22222222222</option>
<option value="" selected>33333333333</option>
<option value="">44444444444</option>
<option value="">55555555555</option>
</select>
<script>
document.addEventListener && document.addEventListener('keydown', function(e) {
if (e.target.nodeName === "SELECT") {
e.target._keypressed = true;
}
}, false);
document.onclick = function(e) {
if ((e&&e.target||{}).nodeName === "OPTION" && e.target.parentNode._keypressed) {
e.target.parentNode._keypressed = false;
return;
}
alert('Сработало событие onclick!');
}
</script>
|
|
Цитата:
|
devote,
Да - я как то попутно выявил ,когда кроссдомен делал, а оне сразу - а зачем - нафига - я растерялся сперва |
| Часовой пояс GMT +3, время: 02:09. |