2014-03-12 59 views
0

如果我創建了一個按鈕,添加一個單擊處理程序,然後將其插入到DOM如下:Click事件代表團消失對話框

var modalContainer = $('<div id="modalContainer" style="display:none;" />') 
modalContainer.append($('<input type="button" id="someButton" />')); 
this_.template = modalContainer; 
$(this_.template).delegate(":button", "click", function() { 
    alert("clicked"); 
}); 
$('#someElement").after(this_.template); 

在這一點上,如果我運行$( 「#someButton」)。click(),點擊事件觸發。但是,只要我調用$(「#modalContainer」).dialog();並打開它,點擊事件不再觸發。

我假定在DOM中將元素重新定位爲Dialog打開過程的一部分的過程中,事件正在被刪除?這是正確的嗎?如果是這樣的話,最好的辦法是什麼?我可以在打開對話框後添加委託,但是我必須擔心在每次打開時添加它之前,刪除它或檢查點擊事件是否存在。

我不得不使用舊版本的jQuery(1.4.1),所以沒有on方法,並且出於性能方面的原因使用live進行了警告。

回答

0

試試這個

$(document).on("click", "button", function() { 
    alert("clicked"); 
    }); 

編輯

$("body").delegate("button", "click", function(){ 
    alert("clicked"); 

});

+0

見上。我沒有訪問on方法 –

+0

我看到$(document).delegate(「button」,「click」,function() –

+0

。那是因爲我將事件委託給容器,它是沒有在DOM中作爲對話框打開過程的一部分重新定位,所以點擊事件不能冒泡到它?如果我在主對話框容器中給按鈕一個父容器,並刪除了事件,我想這也會工作? –