首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery:替换onclick事件

问jquery:替换onclick事件
EN

Stack Overflow用户
提问于 2013-11-18 11:03:09
回答 2查看 9.3K关注 0票数 5

我有以下代码:

代码语言:javascript
复制
  $('#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工作得很好。我有遗漏什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-18 11:10:52

要使用jQuery删除内联属性,请执行以下操作:

代码语言:javascript
复制
$('#tableA').find('#expand_' + row_id).removeAttr('onclick');

但是,对于IE < 9,您应该使用:

代码语言:javascript
复制
.prop('onclick', null);

作为在文档中解释。

但是,我确实想知道,为什么您要在ID选择器中使用find。我认为find返回一个jQ对象数组是正确的。没有一个DOM对象。

也许:

代码语言:javascript
复制
$('#expand_' + row_id).prop('onclick', null);

是更合适的人选。要用另一个属性替换onclick属性,您不需要2个prop调用,顺便说一句:

代码语言:javascript
复制
$('#expand_' + row_id).prop('onclick', 'expandAndShow('+row_id+')');

通过设置另一个处理程序,基本上删除了原始的onclick处理程序。总之,这类事情最好是使用委托来完成:

代码语言:javascript
复制
$('#tableA').on('click', '*[id^=expand_]', function()
{
    alert($(this).attr('id').replace('expand_',''));
});

此代码处理具有id的#tableA元素的所有子元素上的所有单击事件,以expand_开头。然后,在没有expand_子字符串的情况下,继续警告该id。

票数 5
EN

Stack Overflow用户

发布于 2013-11-18 11:05:32

这应该能行

代码语言:javascript
复制
$('#tableA').find("#expand_" + row_id).unbind('click');
$('#tableA').find("#expand_" + row_id).on('click',expandAndShow(row_id));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20046170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档