02.01.2012, 17:07
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от devote
|
Строка 12 вместо onmousewheel нужно писать mousewheel
|
Нет, у меня всё правильно.
Сообщение от devote
|
попробуй написать брехню вместо onmousewheel и оно у тебя также сработает. Тоесть ты просто вызовешь собственное событие, которое не обязательно должно существовать в браузере
|
Ты в этом точно уверен? Прочитай ещё раз мою подпись.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
02.01.2012, 17:15
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
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 у тебя же оно есть, а событие висит на обычном событие без префикса.
|
|
02.01.2012, 18:05
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от devote
|
Опера поддерживает как mousewheel так и DOMMouseScroll.
|
Потому что опера - единственный браузер, подражающий IE. В любом случае к ошибке это не приводит.
Сообщение от devote
|
пример по аналогии jQuery
|
В jQuery это обертка, кури исходники. Так же как пространства имен в именах событий.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Последний раз редактировалось B~Vladi, 02.01.2012 в 22:05.
|
|
02.01.2012, 18:18
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от B~Vladi
|
В jQuery это обертка, кури исходники. Там же как пространства имен в именах событий.
|
Не ужто так сложно прочесть стандарты. Я не сказал что это как сделано в jQuery я сказал что по аналогии, тоесть я хочу проверить есть ли в браузере событие допустим "TratataEvent". идем твоим способом:
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
Сообщение от B~Vladi
|
В jQuery это обертка, кури исходники.
|
Прокурены давно, и я не ставлю в пример jQuery, говорю что стандартные работают по тому же принципу.
А для ИЕ достаточно сделать такую проверку:
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' ) );
Последний раз редактировалось devote, 02.01.2012 в 18:38.
|
|
02.01.2012, 19:15
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
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 ...
}
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
02.01.2012, 19:20
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Как заметили мне в приват, лучше конечно проверять с начала на существование DOMMouseScroll события
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
02.01.2012, 19:34
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
if ( window.MouseScrollEvent || window.WheelEvent ) {
// Gecko | Webkit
event = "DOMMouseScroll";
} else if ( window.addEventListener ) {
// Opera | IE 9
event = "mousewheel";
} else {
// IE before v9
event = "onmousewheel";
}
|
|
02.01.2012, 19:42
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Сообщение от devote
|
if ( window.MouseScrollEvent || window.WheelEvent ) {
// Gecko | Webkit
event = "DOMMouseScroll";
} else if ( window.addEventListener ) {
// Opera | IE 9
event = "mousewheel";
} else {
// IE before v9
event = "onmousewheel";
}
|
Не, криво, серьёзно.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
02.01.2012, 22:04
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Да ок ок, вы посмотрите какого года этот пост. Кстати, я удалил 2 последние.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
02.01.2012, 22:14
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
B~Vladi,
гг, действительно, кто блин такое апает
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
|
|