2013-12-17 95 views
1

美好的一天。 最近我已經開始學習jQuery,並且在jQuery中進行開發時我很綠色。jQuery on()無法正常工作

我對.on()事件有以下問題。我已經搜索堆棧溢出的答案,但我還沒有找到任何工作的解決方案,我的情況。我有以下代碼:

$('input.a').on('click',function(){ 
    $(this).after('<input class="a" type="button" value="click me">'); 
}); 

此功能可以正常工作,但生成的按鈕在點擊它們時不起作用。我應該使用.live();事件,但正如我使用jQuery 1.10.2這個事件已被棄用。訪問jQuery文檔後,我發現,我應該使用。對()按以下方式

$('input.a').on('click','input.a',function(){ 
    $(this).after('<input class="a" type="button" value="click me">'); 
}); 

但是,一旦我做的,全功能停止工作(我假設,因爲我沒有得到任何反饋),但開發者控制檯中也沒有錯誤。 我做錯了什麼,或者有.live()事件的其他替代?

+3

這部分是不正確的:''('input.a')''當使用'.on'時,你需要選擇一個包含*目標元素的元素,例如文檔或包含輸入的表單。 –

+0

我提醒你'.on'工作得很好, – Mathletics

+1

和[將live()變成on( )in jQuery](http://stackoverflow.com/q/8021436/218196)。 –

回答

8

您需要將處理程序綁定到已存在的元素,在您將case處理程序綁定到input元素本身時...將它綁定到所有目標輸入元素的祖先元素(如文檔,體等),它存在於文件中的DOM準備

$(document).on('click','input.a',function(){ 
    $(this).after('<input class="a" type="button" value="click me">'); 
}); 
3

要使用事件代表團,您必須將其綁定到最接近的靜態父元素這樣

$(document).on('click','input.a',function(){ 
    $(this).after('<input class="a" type="button" value="click me">'); 
}); 
+0

出於好奇,爲什麼要指定「最接近」的父對象,而不是'body'或'document'?作爲一個問題個人偏好,我將我的活動委託集中在大型應用程序的指定對象容器中,或者集中在一次性應用程序中的「body」中。 – Palpatim

3

$(selector).live(eventName, handler)替換爲$(document).on(eventName, selector, handler)

在封面下,live正在使用事件委託,這意味着它在DOM樹中冒出更高的事件時處理事件,特別是當它起泡到DOM樹頂部到文檔元素時。因此,要創建相同的體驗,請使用on將處理程序綁定到document,然後傳入選擇器作爲第二個參數,以指示您只想處理原始目標匹配該選擇器的事件。

由於您對此方案的控制力超過了live,所以如果有意義的話,您還可以選擇綁定到DOM樹中的其他元素。因此,不是綁定到document,而是綁定到容納動態創建元素的容器(例如$('.inputWrap').on('click', 'input.a', function (event) { /* ... */ })