【问题标题】:get the value of "onclick" with jQuery?用 jQuery 获取“onclick”的值?
【发布时间】:2010-11-27 18:53:18
【问题描述】:

是否可以通过jQuery获取A标签的onClick属性的当前值?

例如,我有:

<a href="http://www.google.com" id="google" onclick="alert('hello')">Click</a>

我想获取 onclick 代码,以便我可以将其存储起来以供以后使用(因为我将在一段时间内更改 onclick 事件)。

是否可以这样做:

var link_click = $("#google").onclick;

或:

var link_click = $("#google").click;

以便稍后在我的代码中我可以重新应用该代码,或者在必要时 eval() 吗?

【问题讨论】:

    标签: javascript jquery javascript-events


    【解决方案1】:

    这对我有用

     var link_click = $('#google').get(0).attributes.onclick.nodeValue;
     console.log(link_click);
    

    【讨论】:

    • 如果您确实需要访问 onclick 属性的文本而不是绑定的函数或事件本身,这就是您要使用的答案。但是,您应该将 .get(0).attributes.onclick.nodeValue 替换为 .get(0).attributes.onclick.value,因为 nodeValue 已被弃用。
    【解决方案2】:

    我不太确定如何在 jQuery 中执行此操作...但这可行:

    var x = document.getElementById('google').attributes;
    for (var i in x) {
     if (x[i].name == "onclick") alert(x[i].firstChild.data);
    }
    

    但正如 Harshath 所说,如果您使用事件侦听器会更好,因为删除此函数并将其添加回 onclick 事件可能会很麻烦。

    【讨论】:

      【解决方案3】:

      你能解释一下你到底想完成什么吗?一般来说,您永远不必从 HTML 元素中获取 onclick 属性。此外,您不应在元素本身上指定 onclick。而是使用 JQuery 动态设置 onclick。

      但据我了解,您尝试在两种不同的 onclick 功能之间切换。更好的办法是实现您的 onclick 函数,使其能够同时处理这两种情况。

      $("#google").click(function() {
          if (situation) {
              // ...
          } else {
              // ...
          }
      });
      

      【讨论】:

        【解决方案4】:
        $('#google').attr('onclick') + ""
        

        但是,Firebug 显示这会返回一个函数“onclick”。您可以稍后使用以下方法调用该函数:

        (new Function ($('#google').attr('onclick') + ';onclick();'))()
        

        ...或使用正则表达式去除function 并仅获取其中的语句。

        【讨论】:

        • $('#google').attr('onclick') 保存onclick 属性的值(这是一个字符串)。但是,由于浏览器以不同的方式处理事件属性,因此它们返回“function onclick() { alert('hello') }”。因此,如果您想直接调用该函数,则必须剥离 function() {} 或立即调用它。
        【解决方案5】:

        mkoryak 是正确的。

        但是,如果使用更现代的方法(不使用 onclick)将事件绑定到该 DOM 节点,则此方法将失败。

        如果这是您真正想要的,请查看 this question 及其接受的答案。

        干杯!


        我再次阅读了您的问题。
        我想告诉你的是:不要使用onclickonkeypress之类的东西来绑定事件。

        使用addEventListener() 等更好的方法将使您能够:

        1. 为特定事件添加多个事件处理程序
        2. 有选择地移除一些听众

        您可以使用jQuery 包装器,例如$('selector').click(),而不是实际使用addEventListener()

        再次干杯!

        【讨论】:

          【解决方案6】:

          我从来没有这样做过,但它会这样做:

          var script = $('#google').attr("onclick")
          

          【讨论】:

          • 可以获取onclick属性。但并不总是点击事件处理程序。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 1970-01-01
          • 2015-02-26
          • 1970-01-01
          • 2018-08-02
          • 2022-11-25
          • 1970-01-01
          相关资源
          最近更新 更多