我已经明白使用$('。whatever')。click()仅适用于最初创建的项目。其他项目将无法以正确的方式响应。然后我被指示使用类似$('。whatever).on('click',myFunction())的东西。但是,我没有发现任何差异,因为没有调用新创建的项目。
这是一个JSFiddle演示我的示例代码:http://jsfiddle.net/atrus6/zaKZN/
我的初始输入加上'Kill'将以正确的方式工作,但任何额外的'输入+杀戮'都不会做任何事情。我错误地使用.on()还是其他的东西?
答案 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;
});
答案 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;
}