link元素上的click()返回TypeError ...为什么?

时间:2011-07-06 01:28:52

标签: javascript dom

我想弄清楚为什么在<a>标记元素上执行click()函数会返回TypeError为'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'。

为什么呢?我将如何激活此链接?

THX

3 个答案:

答案 0 :(得分:1)

错误意味着javascript锚点对象没有“click()”方法。如果您想以编程方式关注链接,最简单的方法就是这样。

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

这会获取链接的网址(href属性),并通过设置window.location将浏览器重定向到该位置。

答案 1 :(得分:1)

如果要将点击事件发送到DOM,则必须使用适用于兼容浏览器的W3C DOM dispatchEvent方法和其他人使用MS fireEvent方法。有些浏览器可能也不支持。

如果你想处理HTML5浏览器,那么你可以调用元素的click方法,但是你必须首先测试支持,如果浏览器没有响应,也不要感到惊讶。大多数人认为元素监听器/处理程序的程序化触发是一件坏事。

在这种情况下,最好的方法可能就像Zhehao Maoto所说并将 window.location 属性设置为A元素的 href ,或者只是让用户点击链接他们想要并让HTML发挥作用。

修改

测试显示IE支持在A元素上单击,以便触发单击处理程序并遵循链接(如果处理程序不返回false)。在Firefox中,将调用处理程序,但不会遵循链接。

在Chrome中,A元素不执行任何操作,只是按钮响应。 Opera触发A的点击处理程序并跟随链接。所以最重要的是,支持非常不完整(并不是一个惊喜)。

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

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

答案 2 :(得分:0)

除非某个操作绑定到.click()事件,否则在链接上调用onclick方法(我相信)将无效。 你想要这样的东西:

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

如果您尝试做的是关注链接,而不是激活onclick操作,请执行以下操作:

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