Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   "Нажать" кнопку (https://javascript.ru/forum/misc/42779-nazhat-knopku.html)

juser367 09.11.2013 05:43

"Нажать" кнопку
 
Вообщем в gmail есть кнопка "След" она подгружает новую страницу



Вот она аха.



document.querySelector('[id=":hd"]').click();


Пробую по ней кликнуть, а нечего не происходит. Хз чо еще попробовать?

BETEPAH 09.11.2013 12:02

juser367,
Вы работаете в Гугле или пишете под браузер и ошиблись веткой форума?

danik.js 09.11.2013 12:11

Через element.dispatchEvent последовательно триггерь события mousedown и mouseup (проверено).

juser367 09.11.2013 14:51

Цитата:

Сообщение от danik.js (Сообщение 280204)
Через element.dispatchEvent последовательно триггерь события mousedown и mouseup (проверено).

Угу. Опытным путем сам пришел к этому

var event = document.createEvent('MouseEvents', true, false); event.initEvent('mousedown'); document.querySelector('[aria-label="След."]').dispatchEvent(event);
var event = document.createEvent('MouseEvents', true, false); event.initEvent('mouseup'); document.querySelector('[aria-label="След."]').dispatchEvent(event);

juser367 09.11.2013 15:10

function loadNextPage() {
    var el = document.querySelector('[data-tooltip="След."]');
    var ev;
    ev = document.createEvent('MouseEvents'); 
    ev.initEvent('mousedown');
    el.dispatchEvent(ev);
    ev = document.createEvent('MouseEvents');
    ev.initEvent('mouseup');
    el.dispatchEvent(ev);
}
loadNextPage(); // TypeError: Cannot call method 'dispatchEvent' of null

Там еще такая проблема пока мышкой не наведешь на кнопку document.querySelector('[data-tooltip="След."]'); будет возвращать null

danik.js 09.11.2013 15:10

Не пиши китаекод.
Все же элементарно:
var eventTypes = ['mousedown', 'mouseup'];
var eventTarget = document.querySelector('[aria-label="След."]');
eventTypes.forEach(function(eventType) {
    var event = document.createEvent('MouseEvents');
    event.initEvent(eventType);
    eventTarget.dispatchEvent(event);
});


Кстати createEvent принимает один аргумент, не знаю где ты три увидел.

juser367 09.11.2013 23:59

не суть. даже экономии строк нет. http://pastebin.com/JGAfmniv вот решение

danik.js 10.11.2013 06:09

['mousedown', 'mouseup'].forEach(function(type) {
    var event = document.createEvent('MouseEvents');
    event.initEvent(type);
    document.querySelector('[aria-label="След."]').dispatchEvent(event);
});


Часовой пояс GMT +3, время: 03:13.