2016-09-24 55 views
2

我正在通过Jquery附加项目。但追加后无法绑定附加项目上的事件。我追加如下>>追加一个元素后,事件点击不在jquery中的追加元素上工作

var item = '<div id="'+newInputId+'" class="col-md-9" style="padding-right: 0px;">'; 
    item += '<input id="txtInScope" type="text" value="'+currentScopeVal+'" class="form-control" readonly="readonly"/>'; 
    item += '</div>'; 
    item += '<div id="inScopeActionDiv'+newInputId+'" class="col-md-3" style="padding-left: 2px;">'; 
    item += '<button type="button" class="btn btn-warning btn-sm remButton" title="Remove this item">Remove Item</button>'; 
    item += '</div>';  
$('#inScopeDiv').append(item); 

和追加这个后,我想在上面remButton类click事件绑定如下>>

$("#inScopeDiv").delegate(".remButton", "click", function(){ 
    alert('you clicked me again!'); 
}); 
$('#inScopeDiv').on('click', '.remButton', function() { 
    alert("working"); 
}) 
$('.remButton').live('click', function() { 
    alert('live'); 
}) 

但没有结果。任何人都可以请帮我在这个好吗?

+0

'#inScopeDiv'动态追加了。绑定到“文档”或一些未动态追加的父代。 –

+0

inScopeDiv不是动态的。 inScopeActionDiv是动态的。 –

回答

1
$('.remButton').live('click', function() { 
    alert('live'); 
}) 

jQuery的方法现场不再有效:

“在jQuery 1.7中,.live()方法已不使用。对()附加事件。 handlers.jQuery旧版本的用户应该使用.delegate()优先于.live()。“

来源:jquery live

有关事件附件一点解释:

你必须认识到,一个目标要添加一个事件是什么,之前已经有一个方法调用添加事件功能(在这种情况下,关于jQuery)。

在另一方面,与jquery存在的方式,使工作而不元件的存在一个事件安装前:

$('html').on('click', '#inScopeDiv .remButton', function() { 
    alert('works!'); 
}); 
1

将它绑定到不是动态但始终在DOM中的父级。

+0

你可以找到'inScopeDiv',它不是动态的 –

+0

你试过用'body'还是'document'(比如u_mulder也是这样建议的)? – Omnisite

0

您需要每次添加监听器添加条目:

$('#inScopeDiv').append(item) 
      .off() //unbind old listeners so no duplicate listeners 
      .on('click', '.remButton', function() { 
       alert("working"); 
      }); 
0

你可以使用.appendTo存储在变量附加格,然后你可以直接连接单击事件的变量。见它的工作:JSFiddle

$(".appendDiv").click(function() { 
     var item = "<div>I'm a new div!</div>"; 
     var appended_div = $(item).appendTo(".container"); 
     appended_div.click(function() { 
       alert("Working!"); 
     }); 
});