【问题标题】:Dynamically added Jquery remove button not working动态添加的 Jquery 删除按钮不起作用
【发布时间】:2012-06-06 06:59:48
【问题描述】:

这无疑很简单,但是我对 jquery 的了解不足,这对我来说很复杂。基本上我有这个代码:

$(document).ready( 
    function() {
    $( "#remove")
    .click(function() {
        alert("I have been clicked!");
        $(this).parent().parent().remove();
    }); 
});

我在表格中添加了一个按钮来删除它的行(参见上面的代码)。按钮如下:

<td ><button id='remove' type='button'>Remove</button></td>

但是,单击时它什么也不做。我认为这可能与加载文档后创建按钮的事实有关......不过,不知道该怎么做。

【问题讨论】:

  • 尝试在 Firebug 中进行调查。您可能无法使用 $() 选择器正确选择它

标签: jquery button document-ready


【解决方案1】:
$( "td").on('click', '#remove', function() {
        alert("I have been clicked!");
        $(this).parent().parent().remove();
    }); 

当您尝试动态添加按钮时,您需要委托事件处理程序(又名实时事件)。

jQuery > 1.7 中的一个委托事件声明为

$(container).on(eventName, target, handlerFunction);

更多详情见.on()

你有另一个选项叫做.delegate(),它的声明过程是:

$(container).delegate(target, eventName, handlerFunction);

所以对于你的情况,它看起来像:

$('td').delegate('#remove', 'click', function() {
      alert("I have been clicked!");
      $(this).parent().parent().remove();
});

注意

这里的container 表示页面加载时属于DOM 的#remove 按钮的持有者。从你的帖子看来td,你可能还有别的东西(任何有效的jQuery selectors

如果您无法检测到您的 container for #remove,请使用 $(document)$('body') 而不是 $('td')

【讨论】:

  • 1.太快了。 2. 能解释一下吗?
  • @MirroredFate 我试图在我的回答中解释
  • 包含行也是动态生成的,所以使用“td”是行不通的。我尝试使用桌子,但没有奏效。我将继续阅读链接的文档以尝试找到答案。一旦我得到一个,我会标记这个。
  • @MirroredFate 我在笔记中提到你必须在页面加载时设置一个应该属于 dom 的容器,否则使用$(document)$('body')
  • 如果你有 jQuery 1.7+,你真的应该更新为使用.on()。委托仍然可以工作,但on 是首选语法。 Delegate 尚未被弃用,但它可能会在未来的某个时候被搁置。
猜你喜欢
  • 2017-05-16
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 2013-01-09
相关资源
最近更新 更多