click () на элементе ссылки возвращает TypeError ... почему? - PullRequest
2 голосов
/ 06 июля 2011

Я пытаюсь выяснить, почему при выполнении функции click () для элемента тега <a> возвращается ошибка типа undefined_method. Например, посетите эту страницу: http://http://www.google.com/#&q=test. Теперь у каждого результата поиска на этой странице есть имя класса 'l', поэтому, если я спрашиваю:

document.getElementsByClassName('l')

Я получаю список всех результатов поиска <a> тегов. Логически, индексация этого массива следующим образом дает мне специальный тег <a>:

document.getElementsByClassName('l')[0]

Но что, если я хочу нажать на эту ссылку? Я ожидаю, что следующее будет работать

document.getElementsByClassName('l')[0].click()

Но вместо этого я получаю TypeError 'undefined_method'.

Почему? И как мне активировать эту ссылку?

ТНХ

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Ошибка означает, что у якорных объектов javascript нет метода "click ()".Если вы хотите перейти по ссылке программным способом, самый простой способ будет выглядеть следующим образом.

window.location = a.href; // assuming a is an anchor object

Это берет URL ссылки (атрибут href) и перенаправляет браузер в это место, установив window.location.

1 голос
/ 06 июля 2011

Если вы хотите отправить событие click в DOM, вам придется использовать метод W3C DOM dispatchEvent для совместимых браузеров и метод MS fireEvent для других.Некоторые браузеры также могут не поддерживать.

Если вы хотите работать с браузерами HTML5, вы можете вызвать метод click элемента, однако сначала вы должны проверить поддержку и не удивляться, если браузеры не отвечают,Большинство считает программный запуск прослушивателей / обработчиков элементов плохим.

Вероятно, лучший метод в этом случае, как сказал Чжэ Мао, и установить window.location для элемента A href , или просто позволить пользователю щелкнуть нужную ссылку и позволить HTML выполнить свою работу.

Редактировать

Тестирование показывает, что IE поддерживает нажатие наЭлементы для запуска обработчика щелчка и перехода по ссылке (если обработчик не возвращает false).В Firefox будет вызван обработчик, но по ссылке переходить не будет.

В Chrome элемент A ничего не делает, но кнопка реагирует.Opera запускает обработчик щелчков и переходит по ссылке.Таким образом, суть в том, что поддержка очень неоднородна (не удивительно).

например

<!-- Call click() on link to Google -->
<a href="#" onclick="
  var el = document.getElementById('a0');
  if ('click' in el) {
    alert('found click\n' + el.click);
    el.click();
  }">Click link</a>

<!-- Call click on button with onclick handler -->
<a href="#" onclick="
  var el = document.getElementById('b0');
  if ('click' in el) {
    alert('found click\n' + el.click);
    el.click();
  }">Click button</a>

<a href="http://www.google.com" id="a0">Google</a>

<button onclick="alert('click!!');" id="b0">button</button>
0 голосов
/ 06 июля 2011

Вызов метода .click() (я полагаю) для ссылки не будет иметь никакого эффекта, если действие не связано с событием onclick.Вы хотите что-то вроде:

document.getElementsByClassName('l')[0].onclick();

Если вы пытаетесь сделать это следовать ссылке, а не активировать действие onclick, сделайте это:

window.location.href = document.getElementsByClassName('l')[0].getAttribute('href');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...