Как мне синтезировать событие щелчка браузера в элементе DIV? - PullRequest
4 голосов
/ 01 марта 2011

С помощью кнопок я могу вызвать метод click() для них, чтобы сгенерировать щелчок.DIV, однако, не имеют этот метод во всех браузерах.Тем не менее, я могу прикрепить к ним прослушиватели событий щелчка (либо установив .onclick="...", либо добавив прослушиватель событий).

Можно ли как-нибудь "синтезировать" щелчок по такому элементу программно, но без использования jQuery ?В идеале это не будет зависеть от конкретного способа регистрации слушателей (поэтому простой вызов eval(div.onclick) не будет работать для меня) и будет работать во всех современных браузерах.

(Для любопытных мне нужно этодля автоматического тестирования, не обманывая пользователей.)

Ответы [ 2 ]

5 голосов
/ 01 марта 2011

Я недавно написал функцию, которая делает именно это в моей библиотеке, ее можно найти в репозитории GitHub здесь .

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

Если нет, то вот что вам нужно.Замените элемент, ну, элементом.И введите с типом события, в данном случае, click.

// Check for createEventObject
if(document.createEventObject){
    // Trigger for Internet Explorer
    trigger = document.createEventObject();
    element.fireEvent('on' + type, trigger);
}
else {
    // Trigger for the good browsers
    trigger = document.createEvent('HTMLEvents');
    trigger.initEvent(type, true, true);
    element.dispatchEvent(trigger);
}

Вот пример реализации.

function simulateEvent(element, type) {
    // Check for createEventObject
    if(document.createEventObject){
        // Trigger for Internet Explorer
        trigger = document.createEventObject();
        element.fireEvent('on' + type, trigger);
    }
    else {
        // Trigger for the good browsers
        trigger = document.createEvent('HTMLEvents');
        trigger.initEvent(type, true, true);
        element.dispatchEvent(trigger);
    }
}
3 голосов
/ 01 марта 2011

Если ваш браузер совместим с DOM, вы можете использовать метод dispatchEvent(evt) элемента DIV.

Подробнее см. dom w3c spec .

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