用引号替换Jquery attr在IE中不起作用

时间:2012-01-06 20:04:26

标签: jquery replace attr

下面的代码在FF中工作正常,但IE抛出错误,因为onclick函数包含引号。如何在IE中完成这项工作?

我正在做这样的事情

<a href="#" onclick="add('1','val1')" id="link1">Link1</a>
<a href="#" onclick="add('2','val2')" id="link2">Link2</a>

<script>
function add(id,val) {
 //do something
 $('#link'+id).attr('onClick',$('#link'+id).attr('onClick').replace("add","remove"));
}

function remove(id,val) {
 //do something
 $('#link'+id).attr('onClick',$('#link'+id).attr('onClick').replace("remove","add"));
}
</script>

示例:单击link1后,链接应更新为

<a href="#" onclick="remove('1','val1')" id="link1">Link1</a>

4 个答案:

答案 0 :(得分:0)

IE有问题,您可以尝试使用在IE中效果更好的.prop方法。但是,您总是会导致IE问题与更改事件处理程序混乱。

最好每次都调用相同的函数,只需在页面的某个地方保存一个状态,即使在诸如在“add”和remove之间切换类的属性中也是如此。

答案 1 :(得分:0)

这可能有效:

var $link = $('#link');
var click = $link.attr('onClick');

$link.removeAttr('onClick');
$link.click(function() {
  eval(click.replace("XYZ","abc"));
});

但我强烈建议您停止使用onClick并使用jQuery开始绑定事件。如果您可以在onClick中发布代码,我可以将其转换为标准的jQuery对象和函数。

答案 2 :(得分:0)

更改了onclick to href,并且它也可以在IE中使用。

答案 3 :(得分:0)

可能有帮助:

function add(id,val) {

 $('#link'+id).attr('onClick',function (i, click) {
                    var str = new String(click);
                    return str.replace("add","remove");
                });
}