jquery:替换onclick事件

时间:2013-11-18 11:03:09

标签: javascript jquery jquery-ui

我有以下代码:

  $('#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方法。它不起作用。但是,removeClassaddClass效果很好。我错过了什么吗?

2 个答案:

答案 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_子字符串。