如何在锚点标记中以编程方式调用onclick()事件,同时在onclick函数中保留"this"引用?

Rop*_*tah 79 javascript dom-events

是否可以以编程方式为锚标记调用onClick-event,同时保持对锚的'this'引用?

以下不起作用...(至少在Firefox中不起作用:document.getElementById('linkid').click()不是函数)

<script type="text/javascript">
    function doOnClick() {
        document.getElementById('linkid').click();
        //Should alert('/testlocation');
    }
</script>
<a id="linkid" href="/testlocation" onclick="alert(this.href);">Testlink</a>
Run Code Online (Sandbox Code Playgroud)

Gum*_*mbo 106

您需要apply在该元素的上下文中使用事件处理程序:

var elem = document.getElementById("linkid");
if (typeof elem.onclick == "function") {
    elem.onclick.apply(elem);
}
Run Code Online (Sandbox Code Playgroud)

否则this将引用执行上述代码的上下文.

  • 我认为你是唯一一个没有把我视为傻瓜的人(因为没有提到括号符号/ onclick |点击浏览器不兼容).发现! (3认同)
  • 考虑一下:http://www.howtocreate.co.uk/tutorials/javascript/domevents - 将调用onclick函数调用*all*事件处理程序注册?此外,错误地调用事件不会产生与该事件关联的默认操作(例如表单提交). (3认同)
  • +1在答案中不使用jquery,像我一样:) (3认同)
  • 为什么在这里使用`apply()`?你可以只做 `elem.onclick();`,`elem` 将成为函数中的“this”引用——简单! (2认同)

lus*_*chn 18

有一个非常简单的jQuery解决方案,我只是使用它,它的工作非常好:

<script type="text/javascript">
    function doOnClick() {
        $('#linkid').click();
    }
</script>
<a id="linkid" href="/testlocation" onclick="alert(this.href);">Testlink</a>
Run Code Online (Sandbox Code Playgroud)

在IE8-10,Chrome,Firefox中测试过.

  • 为什么要downvote?请评论一个原因,如果你认为出了问题,我可以改进我的问题. (3认同)

sim*_*rsh 15

要触发事件,您基本上只需调用该元素的事件处理程序.您的代码稍有变化.

var a = document.getElementById("element");
var evnt = a["onclick"];

if (typeof(evnt) == "function") {
    evnt.call(a);
}
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ney 6

当然,OP 非常相似地表示这不起作用,但它对我有用。根据我的消息来源中的注释,它似乎是在 OP 的帖子前后或之后实施的。也许现在更标准了。

document.getElementsByName('MyElementsName')[0].click();
Run Code Online (Sandbox Code Playgroud)

就我而言,我的按钮没有 ID。如果您的元素有一个 id,最好使用以下(未经测试)。

document.getElementById('MyElementsId').click();
Run Code Online (Sandbox Code Playgroud)

我最初尝试过这种方法,但没有奏效。谷歌搜索后,我回来发现我的元素是按名称命名的,并且没有 ID。仔细检查您正在调用正确的属性。

来源: https //developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click


小智 5

$("#linkid").trigger("click");
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到SO。您能否详细说明其工作原理(确切的作用等),还有什么使它与其他解决方案不同? (2认同)
  • 为什么要记下这个答案?如果您使用 jquery,这是此页面上的最佳解决方案......一个班轮 - 无法击败它! (2认同)