2011-09-16 32 views
1
a = new object(); 
a.loadInterface(); 

$("button").click(function() { 
    a.doSomething(); 
}); 

的問題是,a.loadInterface()就是加載按鈕到DOM,並在$.post()結束,因爲來自服務器的數據是需要填充的某些屬性發生按鈕。jQuery的點擊功能無法找到選擇

所以我想的是,JavaScript讀取button.click檢測器,但當時沒有按鈕可以綁定。

任何想法?

+1

首先,它是一個大寫字母的「新對象」。 – pimvdb

+2

我假定'object'由其他庫或框架定義,因爲'''''''''''''''''''''''''''' – jmar777

+0

@ jmar777:你是對的,沒有注意到。 (雖然這個庫的變量命名不正確) – pimvdb

回答

3

您對問題的評估是正確的。一個簡單的解決方案是使用delegate。例如,

$(document).delegate('button', 'click', function() { 
    a.doSomething(); 
}); 


編輯:更多信息上 delegate,爲什麼它事件之後適用於動態創建的元素 綁定可以在這裏找到:http://api.jquery.com/delegate/

+0

請原諒我的好奇心,但最近我看到了這種模式,所以我想知道:爲什麼麻煩在'$(document)'上調用'delegate()'而不是使用'live()',同樣的事情,可以說是更簡單?有沒有我失蹤的原因? –

+2

它與* live非常相似,但不同之處在於'delegate'實際上不會運行'button'選擇器來設置事件委託。在'live'的情況下,API規定爲$('some-selector')'運行查詢,即使該選擇器字符串僅用於事件委託過濾。實際上,我認爲這是代表'代表'落在覈心的直接結果。一些背景可以在這裏找到:http://bugs.jquery.com/ticket/5877和在這裏:http://paulirish.com/2010/on-jquery-live/(請注意,jQuery.live是我的建議時間)。 – jmar777

+0

太棒了。非常感謝:) –

0

我認爲你是對的。如果您要根據帖子返回的數據創建按鈕,則需要在帖子成功後執行的方法中綁定事件。