Баг в Опере (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, время: 11:34. |