JavaScript:使用或不使用jQuery来改变onclick的价值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (144)

我想更改onclick锚点上的属性值。我想将其设置为包含JavaScript的新字符串。(该字符串由服务器提供给客户端JavaScript代码,并且它可以包含任何可以放入onclickHTML 中属性的内容。)以下是我尝试的一些内容:

  • 使用jQuery attr("onclick", js)不适用于Firefox和IE6 / 7。
  • 使用setAttribute("onclick", js)Firefox和IE8,但不支持IE6 / 7。
  • 使用onclick = function() { return eval(js); }不起作用,因为您不允许使用return传递给代码eval()

任何人都有建议将onclick属性设置为使其适用于Firefox和IE 6/7/8?另请参阅下面我用来测试这个的代码。

<html>
    <head>
        <script type="text/javascript"
                src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                var js = "alert('B'); return false;";
                // Set with JQuery: doesn't work
                $("a").attr("onclick", js);
                // Set with setAttribute(): at least works with Firefox
                //document.getElementById("anchor").setAttribute("onclick", js);
            });
        </script>
    </head>
    <body>
        <a href="http://www.google.com/" id="anchor" onclick="alert('A'); return false;">Click</a>
    </body>
</html>
提问于
用户回答回答于

onClick如果您使用jQuery,则不应再使用它。jQuery提供了自己的附加和绑定事件的方法。看到.click()

$(document).ready(function(){
    var js = "alert('B:' + this.id); return false;";
    // create a function from the "js" string
    var newclick = new Function(js);

    // clears onclick then sets click using jQuery
    $("#anchor").attr('onclick', '').click(newclick);
});

这应该取消该onClick功能 - 并保持你的“来自一个字符串的JavaScript”。

最好的做法是onclick=""<a>HTML代码中删除元素,然后切换到使用Unobtrusive绑定事件的方法进行单击。

你也说过:

使用onclick = function() { return eval(js); }不起作用,因为您不允许在传递给eval()的代码中使用返回值。

它不会,但onclick = eval("(function(){"+js+"})");会将'js'变量包含在功能机箱中。 onclick = new Function(js);也可以工作,并且阅读起来更简洁。(注意大写字母F) - 参见关于Function()构造函数的文档

用户回答回答于

顺便说一句,没有JQuery,这也可以完成,但显然它很丑,因为它只考虑IE /非IE:

if(isie)
   tmpobject.setAttribute('onclick',(new Function(tmp.nextSibling.getAttributeNode('onclick').value)));
else
   $(tmpobject).attr('onclick',tmp.nextSibling.attributes[0].value); //this even supposes index

无论如何,只是为了让人们对可以做什么有一个总体的了解,因为我相信很多人都会因此而烦恼。

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问9 回答
  • 富有想象力的人

    3 粉丝0 提问7 回答
  • 人生的旅途

    10 粉丝484 提问6 回答
  • Richel

    4 粉丝0 提问6 回答

扫码关注云+社区

领取腾讯云代金券