Javascript - программно вызывать события - PullRequest
3 голосов
/ 04 августа 2009

Скажем, я добавляю события к объекту, используя addEventListener или attachEvent (в зависимости от браузера); возможно ли позднее вызвать эти события программно?

Обработчики событий добавляются / удаляются с помощью такого объекта:

var Event = {
    add: function(obj,type,fn) {
        if (obj.attachEvent) {
            obj.attachEvent('on'+type,fn);
        } else {
            obj.addEventListener(type,fn,false);
        }
    },
    remove: function(obj,type,fn) {
        if (obj.detachEvent) {
            obj.detachEvent('on'+type,fn);
        } else {
            obj.removeEventListener(type,fn,false);
        }
    }
}

Или мне нужно хранить копии каждого обработчика и просто добавить функцию Event.invoke (...)?

Редактировать: Кроме того, JQuery не вариант: D

Ответы [ 2 ]

11 голосов
/ 04 августа 2009

Как обычно, вы должны сделать это одним способом для Internet Explorer, и правильный путь для всего остального; -)

Для IE:

document.getElementById("thing_with_mouseover_handler").fireEvent("onmouseover");

Подробнее см. в библиотеке MSDN .

Для настоящих браузеров:

var event = document.createEvent("MouseEvent");
event.initMouseEvent("mouseover", true, true, window);
document.getElementById("thing_with_mouseover_handler").dispatchEvent(event);

Обратите внимание, что, хотя второй, основанный на стандартах подход кажется более многословным, он также значительно более гибок: проверьте документацию, начиная с ссылки на события в DOM Mozilla по адресу https://developer.mozilla.org/en/DOM/event

Хотя это только косвенно связано с тем, что вы пытаетесь сделать (это связано с пользовательскими событиями, а не с обычными), у Дина Эдвардса есть пример кода на http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/, который может стоить посмотреть.

1 голос
/ 04 августа 2009

Разве вы не можете создавать функции, которые выполняют требуемую работу, запускать те из событий, а затем запускать те же функции позже, когда это необходимо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...