JavaScript:使用或不使用jQuery更改onclick的值

JavaScript:使用或不使用jQuery更改onclick的值,javascript,jquery,onclick,attributes,Javascript,Jquery,Onclick,Attributes,我想更改锚点上的onclick属性的值。我想将其设置为包含JavaScript的新字符串。(该字符串由服务器提供给客户端JavaScript代码,它可以包含您可以在HTML中的onclick属性中放入的任何内容。)以下是我尝试过的几件事: 使用jQueryattr(“onclick”,js)不能同时用于Firefox和IE6/7 使用setAttribute(“onclick”,js)可用于Firefox和IE8,但不能用于IE6/7 使用onclick=function() 有人建议将on

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

  • 使用jQuery
    attr(“onclick”,js)
    不能同时用于Firefox和IE6/7
  • 使用
    setAttribute(“onclick”,js)
    可用于Firefox和IE8,但不能用于IE6/7
  • 使用
    onclick=function()
有人建议将onclick属性设置为,以便在Firefox和IE6/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>

$(文档).ready(函数(){
var js=“警报('B');返回false;”;
//使用JQuery设置:不起作用
$(“a”).attr(“onclick”,js);
//Set with setAttribute():至少适用于Firefox
//document.getElementById(“锚”).setAttribute(“onclick”,js);
});

Jquery的一个问题是click函数不确认html中手工编码的onclick

所以,你几乎必须做出选择。在init函数中设置所有处理程序,或在html中设置所有处理程序


JQuery中的单击事件是单击函数$(“myelt”)。单击(函数…。

如果使用JQuery,则不应再使用
onClick
。jQuery提供了自己的附加和绑定事件的方法。看

这将取消
onClick
函数,并保留“字符串中的javascript”

最好的做法是从绑定要单击的事件的
方法中删除
onclick=“

你还说,

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


否-不会,但是
onclick=eval(((function(){“+js+”})”
将把“js”变量包装在函数外壳中
onclick=newfunction(js)
也可以工作,阅读起来更清晰。(注意大写字母F)——请参见

只需使用jQuery绑定方法!jquery选择器!。绑定('event',!fn!)


想出了一个快速而肮脏的解决办法。刚刚使用的
如果你不想实际导航到一个新页面,你也可以在页面上的某个地方设置锚,如下所示

<a id="the_anchor" href="">

请注意,按照gnarf的想法,您也可以这样做:

var js = "alert('B:' + this.id); return false;";<br/>
var newclick = eval("(function(){"+js+"});");<br/>
$("a").get(0).onclick = newclick;
var js=“警报('B:'+this.id);返回false;”
var newclick=eval(((function(){“+js+”});”
$(“a”).get(0).onclick=newclick;

这将在不触发事件的情况下设置onclick(这里也有同样的问题,我花了一些时间才发现)。

顺便说一句,如果没有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

无论如何,只是为了让人们对可以做什么有一个整体的想法,因为我相信很多人都偶然发现了这个烦恼。

“使用jQuery还是使用jQuery”你希望jQuery与该jQuery一起使用吗?我假设OP想在jQuery时使用jQuery。Tom,我不能使用$(“myelt”)。单击此处,因为我要运行的代码是字符串。(参见我对其他答案的评论)啊。我明白了:函数js(){alert('B');返回false;}Mmmh。。。很抱歉,我看不出这是对原始问题的回答。attr('onclick','')不起作用,您需要使用removeAttr('onclick')也要小心:jQuery unbind()vs removeAttr()参见
<a href="javascript:alert('I am your script.'); alert('So am I.');">Click me</a>
var js = "alert('B:' + this.id); return false;";<br/>
var newclick = eval("(function(){"+js+"});");<br/>
$("a").get(0).onclick = newclick;
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