Запустить событие с прототипом - PullRequest
60 голосов
/ 20 января 2009

Кто-нибудь знает метод для запуска события в Prototype, как вы можете с помощью функции запуска jQuery?

Я связал прослушиватель событий с помощью метода наблюдения, но я также хотел бы иметь возможность запускать событие программно.

Заранее спасибо

Ответы [ 4 ]

84 голосов
/ 20 января 2009

event.simulate.js соответствует вашим потребностям.

Я использовал это несколько раз, и это работает как шарм. Это позволяет вручную запускать собственные события , такие как щелчок или зависание, например:

$('foo').simulate('click');

Самое замечательное в этом то, что все подключенные обработчики событий все равно будут выполняться, как если бы вы сами щелкнули по элементу.

Для пользовательских событий вы можете использовать стандартный метод-прототип Event.fire().

35 голосов
/ 20 января 2009

Я не думаю, что есть один встроенный в Prototype, но вы можете использовать это (не проверено, но должно, по крайней мере, привести вас в правильном направлении):

Element.prototype.triggerEvent = function(eventName)
{
    if (document.createEvent)
    {
        var evt = document.createEvent('HTMLEvents');
        evt.initEvent(eventName, true, true);

        return this.dispatchEvent(evt);
    }

    if (this.fireEvent)
        return this.fireEvent('on' + eventName);
}

$('foo').triggerEvent('mouseover');
5 голосов
/ 20 апреля 2010

Я нашел этот пост полезным ... http://jehiah.cz/archive/firing-javascript-events-properly

В нем описан способ запуска событий в Firefox и IE.

function fireEvent(element,event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}
3 голосов
/ 26 июня 2011

Ответы здесь верны для «нормальных» событий, то есть событий, которые определены User Agent, но для пользовательских событий вы должны использовать метод «fire» прототипа. например,

$('something').observe('my:custom', function() { alert('Custom'); });
.
.
$('something').fire('my:custom'); // This will cause the alert to display
...