能否手动调用DOM对象上的点击事件?

4
我正在使用addthis,他们有一堆混淆的代码,我不想在他们嵌入的javascript中挖掘。我想让我的页面上的一个他们的按钮“被点击”,而用户不必触摸它。
因此,在本质上,有一个包含他们按钮的<a>(当用户单击它时,他们嵌入的javascript会处理它)。我想通过自己的javascript为他们“点击”它,但是没有看到与锚标记对象相关联的本地“clickMe()”函数之类的东西。
这是否可能,还是由于安全问题而缺失在规范中?
5个回答

3

我仔细研究了AddThis代码,他们的功能是为每个标签的父div设置一个onclick处理程序。如果您知道要单击的divid,只需将其放在此行中即可。作为备选方案,您还可以尝试使用aclick()

var id = 'atic_facebook'; //for example
document.getElementById(id).onclick();

嗯...我怎么会错过那个?! - Yevgeny Simkin
@Niklas 我测试过了,使用Firebug可以正常工作:document.getElementById('atic_facebook').onclick(); 但是只有在它没有设置为 display:none 的情况下才能正常工作。 - js1568
@js1568 它会将用户重定向到 Facebook 吗? - Niklas
提前授予了勾号。在A标签上,click不是一个被识别的函数,而onclick()在Chrome中可以工作,但在Webkit或Safari中无法工作...回到起点 :) - Yevgeny Simkin

2
这是一个在DOM元素上编程触发事件的函数:
function eventFire(el, etype){
   if (el.fireEvent) {
     (el.fireEvent('on' + etype));
   } else {
     var evObj = document.createEvent('Events');
     evObj.initEvent(etype, true, false);
     el.dispatchEvent(evObj);
   }
}
// usage
eventFire(document.getElementById('someHref'),'click');
eventFire(document.getElementById('someElement'),'mouseover');
// etc.

1
您可以直接调用元素的“onclick”函数:
var as = document.getElementsByTagName('a'), i;
for (i=0; i<as.length; i++) {
  if (as[i].onclick) {
    as[i].onclick(); // Run the "onclick" function.
  } else if (as[i].href) {
    window.location = as[i].href; // Browse to the URL.
  } else {
    // Not much we can do!
  }
}

1

所以,这似乎是一个每个解决方案看起来都像锤子的问题,因为我们假设它是一个钉子。

做到这一点的方法(并且它是100%跨浏览器的)就是将页面重定向到addthis设置为链接的href。

换句话说...

self.location.href = document.getElementById("addThisFbLink").href;

就是这样了。

@kooilnc,感谢您的解决方案,虽然不是我需要的,但在某种程度上它帮助我找到了答案,所以谢谢。


0

jQuery trigger():

描述:执行所有附加到匹配元素的处理程序和行为,以触发给定事件类型。

$('a').trigger('click');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接