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
不能同时用于Firefox和IE6/7attr(“onclick”,js)
- 使用
可用于Firefox和IE8,但不能用于IE6/7setAttribute(“onclick”,js)
- 使用
onclick=function()
<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