2012-03-22 84 views
0

正如我已经理解使用$('。whatever')。click()仅适用于最初创建的项目。其他项目不会以正确的方式回应。然后我被引导到使用类似$('。whatever).on('click',myFunction())的东西。但是,我没有检测到任何差异,因为新创建的项目没有被调用。通过jQuery创建的按钮不会响应点击

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

我最初的输入端加“杀”将在正确的方式工作,但是任何额外的“输入+杀的不会不会做任何事情。我错误地使用.on()还是其他的东西?

回答

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

+0

直播()已废弃的1.7,但第二个工作(当我没有在报价文件) – Atrus 2012-03-22 05:13:44

+0

工作对我来说,检查演示,didnt你的意思是这样的 – 2012-03-22 05:19:29

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; 
} 
1

现场()你似乎期望在()上班工作,但不建议使用。 ()仅适用于on()被调用时存在的元素。 但是,您可以通过将()绑定到一个元素来像使用live()一样使用它, 将作为新创建元素的父元素,并指定一个选择器。

因此,例如,

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

谢谢,我不知道只在元素工作。 – Atrus 2012-03-22 12:57:55