Нажать на все кнопки по очереди

412
31 января 2017, 23:37

Есть:

setInterval (
    function() {
        document.getElementsByClassName('farm_icon_a').click();
    }, 1000
);

Получаю:

Uncaught TypeError: document.getElementsByClassName(...).click is not a function at :3:56

Как правильно сделать?

Answer 1

Лучше использовать querySelector вместо getElementsByClassName, потому, что он кэширует результат.
getElementsByClassName возвращает nodeList, который является псевдомассивом у которого нет методов обычных массивов.
Вам необходимо nodeList преобразовать в массив через Array.prototype.slice.call(nodeList) или Array.from() (это новый метод и не во всех браузерах поддерживается), пройтись по этому массиву циклом и на каждый элемент сделать click()

var buttons = Array.prototype.slice.call(document.querySelectorAll('.farm_icon_a'));
buttons.forEach(function(button, index) {
  setTimeout(function() { button.click(); }, index * 100); 
});
Answer 2
setInterval (
    function() {
        var arr = document.getElementsByClassName('farm_icon_a');
        for(var i = 0; i < arr.length; i++)
        {
           arr[i].click();
        }
    }, 1000
);
Answer 3
// get button array (Из соседнего ответа)
var buttons = Array.prototype.slice.call(document.querySelectorAll('.farm_icon_a'));
var clickers = buttons.map(function(button) { 
  return function(){
    button.click();
  }
});

var index = 0;
setInterval(function(){
  if (index == clickers.length) index = 0;
  clickers[index]();
  index++;
}, 500);
READ ALSO
java script событие

java script событие

Когда я нажимаю на кнопку создается элемент с текстом и резко исчезает

384
Всплывающее окно на сайте в IE

Всплывающее окно на сайте в IE

Нем могу понять в чем проблема, во всех браузерах нормально работает, а в IE нетСуть проблемы, блок появляется и через секунду сразу исчезает,...

346