2016-09-24 67 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!"); 
     }); 
});