我有以下代码:
$('#tableA').find("#expand_" + row_id).prop("onclick", null);
$('#tableA').find("#expand_" + row_id).prop("onclick", 'expandAndShow('+row_id+')');
$('#tableA').find("#expand_" + row_id).removeClass('icon-plus-sign');
$('#tableA').find("#expand_" + row_id).addClass('icon-ok-sign');
我想用新的方法替换先前链接的onlick
方法。它不起作用。但是,removeClass
和addClass
效果很好。我错过了什么吗?
答案 0 :(得分:4)
这应该有效
$('#tableA').find("#expand_" + row_id).unbind('click');
$('#tableA').find("#expand_" + row_id).on('click',expandAndShow(row_id));
答案 1 :(得分:4)
使用jQuery删除内联属性:
$('#tableA').find('#expand_' + row_id).removeAttr('onclick');
然而,对于IE< 9,你应该使用:
.prop('onclick', null);
作为explained in the docs。
但是,我确实想知道为什么你将find
与ID选择器一起使用。我相信我说find
返回jQ对象的数组是正确的。不是一个DOM对象
也许:
$('#expand_' + row_id).prop('onclick', null);
更合适。要将onclick
属性替换为另一个属性,顺便说一下,您不需要进行2次prop
次呼叫:
$('#expand_' + row_id).prop('onclick', 'expandAndShow('+row_id+')');
基本上通过设置另一个处理程序来删除原始onclick
处理程序。总而言之,这种事情最好用委托来完成:
$('#tableA').on('click', '*[id^=expand_]', function()
{
alert($(this).attr('id').replace('expand_',''));
});
此代码处理#tableA
元素的所有子元素上具有id的所有点击事件,以expand_
开头。然后我继续警告该id,没有expand_
子字符串。