最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - click() on a link element returns a TypeError ... why? - Stack Overflow

matteradmin8PV0评论

I'm trying to figure out why executing a click() function on an <a> tag element returns a TypeError of 'undefined_method'. For an example, visit this page: http://;q=test . Now, each search result on this page has a class name of 'l', so if I ask for:

document.getElementsByClassName('l')

I get a list of all of the search result <a> tags. Logically, indexing this array as follows gives me a specific <a> tag:

document.getElementsByClassName('l')[0]

But, what if I want to click on that link? I would expect the following to work

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

But instead I get the TypeError 'undefined_method'.

Why? And how would I activate this link?

thx

I'm trying to figure out why executing a click() function on an <a> tag element returns a TypeError of 'undefined_method'. For an example, visit this page: http://http://www.google./#&q=test . Now, each search result on this page has a class name of 'l', so if I ask for:

document.getElementsByClassName('l')

I get a list of all of the search result <a> tags. Logically, indexing this array as follows gives me a specific <a> tag:

document.getElementsByClassName('l')[0]

But, what if I want to click on that link? I would expect the following to work

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

But instead I get the TypeError 'undefined_method'.

Why? And how would I activate this link?

thx

Share Improve this question asked Jul 6, 2011 at 1:28 mixmix 7,16115 gold badges65 silver badges94 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 1

If you want to dispatch a click event into the DOM, you'll have to use the W3C DOM dispatchEvent method for pliant browsers and the MS fireEvent method for others. Some browsers may not support either.

If you want to deal with HTML5 browsers, then you can call the element's click method, however you must test for support first and don't be surprised if browsers don't respond. Most view programatic firing of element listeners/handlers as a bad thing.

Probably the best method in this case is as Zhehao Maoto said and set window.location property to the A element's href, or just let the user click on the link they want and let HTML do its job.

Edit

Testing shows that IE supports click on A elements so that the click handler is fired and the link is followed (if the handler doesn't return false). In Firefox, the handler will be called but the link won't be followed.

In Chrome, an A element does nothing but the button responds. Opera fires the A's click handler and follows the link. So the bottom line is that support is very patchy (not really a surprise).

e.g.

<!-- 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." id="a0">Google</a>

<button onclick="alert('click!!');" id="b0">button</button>

The error means that javascript anchor objects do not have a "click()" method. If you want to follow the link programmatically, the easiest way would be like so.

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

This takes the link's url (the href attribute) and redirects the browser to that location by setting window.location.

Calling the .click() method (I believe) on a link will have no effect unless an action is bound to the onclick event. You want something like:

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

If what you're attempting to do is follow the link, rather than activate an onclick action, do this:

window.location.href = document.getElementsByClassName('l')[0].getAttribute('href');
Post a comment

comment list (0)

  1. No comments so far