Javascript нажатие одной из нескольких кнопок

#javascript #greasemonkey

#javascript #greasemonkey

Вопрос:

В форме присутствуют две кнопки, и я хотел бы использовать GreaseMonkey для автоматического нажатия одной из кнопок при загрузке страницы. Эти две кнопки являются:

 <td rowspan="2"><input class="first action" name="first" type="submit" value="First Action" style="font-size: 10pt;" /></td>
<td rowspan="2"><input class="second action" name="second" type="submit" value="Second Action" style="font-size: 10pt;" /></td>
  

Я попробовал два приведенных ниже кода, но ни один из них не работает. Первый выбирает форму и пытается отправить ее, и я получаю сообщение об ошибке «Действие не разрешено». Второй пытается нажать () кнопку.

Первый:

 var button = document.getElementById('units_form');
window.location(button);
  

Второй:

 var button = document.getElementByClassName('first action');
button.click();
  

Комментарии:

1. вторая содержит синтаксическую ошибку, которую вы бы увидели, если бы потрудились проверить консоль браузера. getElement(s)ByClassName . Это элементы ВО МНОЖЕСТВЕННОМ ЧИСЛЕ, а не в единственном числе.

2. Элемент может быть с или без s, правильно? Это не работает в любом случае.

3. нет. это невозможно. это единственное число для «byId», потому что идентификатор dom ДОЛЖЕН быть уникальным. но может быть несколько элементов с одним и тем же классом, поэтому функция также множественная.

4. Делает с тех пор. Спасибо. Но после этого исправления он все равно не работает.

5. geBClassName также возвращает массив результатов, а не один узел dom. вы не можете щелкнуть по массиву. попробуйте button[0].click , но сначала сделайте console.log(button) , чтобы увидеть, что вы получили обратно.

Ответ №1:

Во-первых, общее решение:

  • чтобы получить объект элемента по имени класса, используйте document.getElementsByName("class_name")[0] . Последняя часть [0] дает вам первый из всех элементов, имеющих этот класс
  • Чтобы запустить событие для элемента, см. Эту статью о MDN. Я настоятельно рекомендую прочитать все это. Судя по вашему сообщению, вы довольно ленивы, когда дело доходит до чтения статей.

Собираем все это вместе:

 var button_element = document.getElementsByName("button-class-name")[0];
var event_object = new MouseEvent('click', {
    'view': window,
    'bubbles': true,
    'cancelable': true
});
button_element.dispatchEvent(event_object);
  

Кроме того, большинство сайтов используют библиотеку jQuery, для которой это сводится к:

 $(".class_name").click();
  

Обратите внимание, что это сработает для всех элементов с этим именем класса.