Подскажите пожалуйста, пишу класс (по сути набор полезных функций). Задача одного из методов генерировать пользовательские события. (Метод __createEvent() ). Код класса приведён ниже ( к сожалению не весь, длина сообщения не позволяет ).
Класс:
/**
* Метод создаёт искуственное событие.
*
* Помимо создания стандартных событий, метод даёт возможность создавать
* собственные высокоуровневые, семантические события.
*
* @param: [DOM Object] item - ссылка на объект, которому адресовано событие.
* @param: [string] event_type - тип вновь созданного события:
* (допустимые варианты) Events, MouseEvents, UIEvents
* @param: [object] init - Объект инициирующий событие:
* Параметры:
* Дополнительные араметры устанавливаемые на событие:
* [object] event_data - обект дополнительных параметров
*
* Для события типа Events:
* [string] type - имя события ( click, mouseup, focus... )
* [boolean] canbubble - способность события к всплытию
* [boolean] cancelable - признак невозможности отмены соббытия
*
* Для событий типа MouseEvents:
* [string] type - имя события ( click, mouseup, focus... )
* [boolean] canBubble - способность события к всплытию
* [boolean] cancelable - признак невозможности отмены соббытия
* [abstractView] view - относиельно какой области произведён клик ( по умолчанию window )
* [int] detail - произведённое колличество кликов ( по умолчанию 1 )
* [int] screenX, - координата клика по оси X ( относительно экрана )
* [int] screenY, - координата клика по оси У ( относительно экрана )
* [int] clientX, - координата клика по оси X ( относительно рабочей области )
* [int] clientY, - координата клика по оси У ( относительно рабочей области )
* [boolean] ctrlKey - указатель удерживания кнопки Ctrl
* [boolean] altKey - указатель удерживания кнопки Alt
* [boolean] shiftKey - указатель удерживания кнопки Shift
* [boolean] metaKey - указатель удерживания кнопки
* [short] button - номер нажатой кнопки мыши
* [EventTarget] relatedTarget - объект в котором произведён клик
*
* Для событий типа UIEvents:
* [string] type - имя события ( click, mouseup, focus... )
* [boolean] canbubble - способность события к всплытию
* [DOM Object] view - абстрактное отображение асоциирующиеся с событием ( по умолчанию window )
* [int] detail - произведённое колличество кликов ( по умолчанию 1 )
*
* @return bool;
*/
baseObject.prototype.__createEvent = function( item, event_type, init ) {
var eObj = null;
var init = init || {};
( event_type == 'MouseEvent' ) ? init.type = init.type || 'click' :
init.type = init.type || 'focus';
init.canbubble = init.canbubble || true,
init.cancelable = init.cancelable || true,
init.view = init.view || window,
init.detail = init.detail || 1,
init.screenX = init.screenX || 0,
init.screenY = init.screenY || 0,
init.clientX = init.clientX || 0,
init.clientY = init.clientY || 0,
init.ctrlKey = init.ctrlKey || false,
init.altKey = init.altKey || false,
init.shiftKey = init.shiftKey || false,
init.metaKey = init.metaKey || false,
init.button = init.button || false,
init.relatedTarget = init.relatedTarget || window
try {
if ( ( typeof item != 'object' ) ||
( typeof event_type != 'string' ) ||
( typeof init != 'object' )
) throw this.__setError( 'TYPE_ERROR', 'baseObject::__createEvent()' );
this.__print_r( eObj );
if ( document.createEvent ) {
eObj = document.createEvent( ( event_type + 's' ) );
//this.__print_r( eObj );
alert( eObj );
switch( event_type ) {
case 'Event' : eObj.initEvent( init.type, init.canbubble, init.cancelable ); break;
case 'MouseEvent' : eObj.initMouseEvent( init.type, init.canbubble, init.cancelable, init.view, init.detail, init.screenX, init.screenY, init.clientX, init.clientY, init.ctrlKey, init.altKey, init.shiftKey, init.metaKey, init.button, init.relatedTarget ); break;
case 'UIEvent' : eObj.initUIEvent( init.type, init.canbubble, init.view, init.detail ); break;
}
} else {
eObj = document.createEventObject();
for ( var i in init ) {
eObj[i] = init[i];
}
}
if ( !eObj.event_data )
eObj.event_data = init.event_data || {};
this.__print_r( eObj );
( item.dispatchEvent ) ? item.dispatchEvent( eObj ) :
item.fireEvent( ( 'on' + init.type ), eObj );
} catch ( e ) {
this.__error = e;
return false;
}
};
Полный код класса и примера HTML – во вложении.
Так вот, код замечательно работает в FF и Opera ( сообщение EVALIBL EVENT!!!! стабильно выводится ), но в IE упорно не работает. Если меняем имя событие на стандартное ( в искоднике примера нужно раскоментить
//bObj.__createEvent( item, 'MouseEvent', {type:'mousedown'} );
строку и закоментировать
bObj.__createEvent( item, 'Event', {type:'home'} );
) То работает в обоих браузерах.
Так вот вопрос.
Можно ли создать произвольное событие в IE.