Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.01.2012, 17:07
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от devote
Строка 12 вместо onmousewheel нужно писать mousewheel
Нет, у меня всё правильно.
Сообщение от devote
попробуй написать брехню вместо onmousewheel и оно у тебя также сработает. Тоесть ты просто вызовешь собственное событие, которое не обязательно должно существовать в браузере
Ты в этом точно уверен? Прочитай ещё раз мою подпись.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #22 (permalink)  
Старый 02.01.2012, 17:15
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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 у тебя же оно есть, а событие висит на обычном событие без префикса.
Ответить с цитированием
  #23 (permalink)  
Старый 02.01.2012, 18:05
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от devote
Опера поддерживает как mousewheel так и DOMMouseScroll.
Потому что опера - единственный браузер, подражающий IE. В любом случае к ошибке это не приводит.
Сообщение от devote
пример по аналогии jQuery
В jQuery это обертка, кури исходники. Так же как пространства имен в именах событий.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 02.01.2012 в 22:05.
Ответить с цитированием
  #24 (permalink)  
Старый 02.01.2012, 18:18
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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.
Ответить с цитированием
  #25 (permalink)  
Старый 02.01.2012, 19:15
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 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 ...
}
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #26 (permalink)  
Старый 02.01.2012, 19:20
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Как заметили мне в приват, лучше конечно проверять с начала на существование DOMMouseScroll события
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #27 (permalink)  
Старый 02.01.2012, 19:34
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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";
}
Ответить с цитированием
  #28 (permalink)  
Старый 02.01.2012, 19:42
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 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";
}
Не, криво, серьёзно.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #29 (permalink)  
Старый 02.01.2012, 22:04
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Да ок ок, вы посмотрите какого года этот пост. Кстати, я удалил 2 последние.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #30 (permalink)  
Старый 02.01.2012, 22:14
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

B~Vladi,
гг, действительно, кто блин такое апает
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16
Нужна помощь в завершении скрипта - если конечно не трудно. Rush Общие вопросы Javascript 11 18.10.2008 15:06
Проверка полей формы Rush Общие вопросы Javascript 2 16.10.2008 23:44
НУжна помощ ! Jumong Общие вопросы Javascript 4 01.10.2008 23:17