我想弄清楚为什么在<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
答案 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');