通过jquery创建的按钮不响应点击

时间:2012-03-22 05:03:11

标签: javascript jquery html

我已经明白使用$('。whatever')。click()仅适用于最初创建的项目。其他项目将无法以正确的方式响应。然后我被指示使用类似$('。whatever).on('click',myFunction())的东西。但是,我没有发现任何差异,因为没有调用新创建的项目。

这是一个JSFiddle演示我的示例代码:http://jsfiddle.net/atrus6/zaKZN/

我的初始输入加上'Kill'将以正确的方式工作,但任何额外的'输入+杀戮'都不会做任何事情。我错误地使用.on()还是其他的东西?

3 个答案:

答案 0 :(得分:3)

尝试:


$('.rmv').live('click', function() {
    console.log('here');
    $(this).parent().remove();
    return false;
});

OR


$(document).on('click', '.rmv', function() {
    console.log('here');
    $(this).parent().remove();
    return false;
});

jsFiddle Demo

答案 1 :(得分:1)

live()的工作方式与您希望on()一样有效,但已被弃用。

on()仅适用于调用on()时存在的元素。 但是,您可以通过将()绑定到一个元素来像live()一样使用它 将是新创建的元素的父级,并指定选择器。

所以,例如,

$('body').on('click', '.rmv', function() {
    console.log('here');
    $(this).parent().remove();
    return false;
});

答案 2 :(得分:0)

新创建的元素不会自动绑定到您的点击处理程序,因为它们是在您定义该绑定后创建的。一种解决方案可能是在创建新元素时绑定它们。

jsFiddle这里:http://jsfiddle.net/zaKZN/17/

$('.rmv').on('click', remove);

$('.add').click(add);

function remove()
{
    console.log('here');
    $(this).parent().remove();
    return false;
}

function add()
{
    var add = "<div class='input-append'>";
    add += "<input type='text' name='br'>";
    add += "<button class='btn btn-danger rmv'><i class='icon-minus'>Kill</i></button></div>";
    $(this).before(add);

    //Bind newly created elements
    $('.rmv').on('click', remove);

    return false;
}