Цитата:
Цитата:
|
B~Vladi,
Ну вот смотри, Опера поддерживает как mousewheel так и DOMMouseScroll. привожу пример: function getWheelEvent(){ var eventType='DOMMouseScroll'; var listener=function(){ eventType='myevent'; } var ele=document.createElement('div'); document.body.appendChild(ele); if(ele.addEventListener)ele.addEventListener('myevent',listener,false); else if(ele.attachEvent)ele.attachEvent('onmyevent',listener); if(document.createEvent&&ele.dispatchEvent){ var evt=document.createEvent('HTMLEvents'); evt.initEvent('myevent',true,true); ele.dispatchEvent(evt); }else ele.fireEvent('onmyevent',event); if(ele.removeEventListener)ele.removeEventListener('myevent',listener,false); else if(ele.detachEvent)ele.detachEvent('onmyevent',listener); document.body.removeChild(ele); return eventType; } alert(getWheelEvent());тут ты получишь myevent потому что функция addEvenetListener по стандартам w3c позволяет создавать собственные события и инициировать их. просто пример по аналогии jQuery $('div').bind('myevent', function(){ alert("triggered myevent"); }); $('div').trigger('myevent'); тоесть в твоем коде по стандарту initEvent не должен начинаться с префикса on у тебя же оно есть, а событие висит на обычном событие без префикса. |
Цитата:
Цитата:
|
Цитата:
function test( event ) { var status = false, elem = document.createElement('div'); document.body.appendChild( elem ); elem.addEventListener( event, function() { status = true; }, false); var evt=document.createEvent('HTMLEvents'); evt.initEvent( event ,true, true ); elem.dispatchEvent( evt ); document.body.removeChild( elem ); return status; } alert( test( 'TratataEvent' ) ); alert( test( 'click' ) ); alert( test( 'DOMMouseScroll' ) ); alert( test( 'onmousewheel' ) ); alert( test( 'mousewheel' ) ); Все эти тесты всегда выведут значение true Цитата:
А для ИЕ достаточно сделать такую проверку: function test( event ) { var status = false, elem = document.createElement('div'); document.body.appendChild( elem ); try { elem.fireEvent( event, document.createEventObject() ); status = true; } catch ( _ ) { } document.body.removeChild( elem ); return status; } alert( test( 'onmousewheel' ) ); alert( test( 'onblahtest' ) ); |
B~Vladi,
У вас таки ошибка. if(ele.addEventListener)ele.addEventListener('mousewheel',listener,false); var evt=document.createEvent('HTMLEvents'); evt.initEvent('onmousewheel',true,true); ele.dispatchEvent(evt); Найдите разницу в 2 символа в создаваемом и запускаемом объекте. Это лишь ИЕ падает на fireEvent, когда пытаешься ему вызвать не существующее событие в браузере. И так, как правильно проверить, в браузере поддерживается mousewheel или DOMMouseScroll if(document.body.addEventListener){ if('onmousewheel' in document.body || document.body.onmousewheel === null){ // mousewheel event }else if(window.MouseScrollEvent){ //DOMMouseScroll by Gecko }else if(window.WheelEvent){ //DOMMouseScroll DOM 3 Events - Webkit support }else { //default behavior //passing 2 events - DOMMouseScroll && mousewheel } }else if(window.attachEvent){ //old IE - mousewheel }else { //default behavior ... } |
Как заметили мне в приват, лучше конечно проверять с начала на существование DOMMouseScroll события :)
|
if ( window.MouseScrollEvent || window.WheelEvent ) { // Gecko | Webkit event = "DOMMouseScroll"; } else if ( window.addEventListener ) { // Opera | IE 9 event = "mousewheel"; } else { // IE before v9 event = "onmousewheel"; } |
Цитата:
|
Да ок ок, вы посмотрите какого года этот пост. Кстати, я удалил 2 последние.
|
B~Vladi,
гг, действительно, кто блин такое апает :) |
Часовой пояс GMT +3, время: 00:19. |