2013-05-10 91 views
0

在我的web應用程序中,我有一個無序列表,其中包含15個項目的無序列表。我使用ajax從API中抓取了100個新項目,並使用.append(html)將它們添加到當前的ul。每個li旁邊都有一個複選框,選中時需要撥打some_functionjquery如何訪問插入到DOM的html上的事件

已渲染的元素能夠訪問some_function,但不能訪問新加載的元素。我如何在新加載的ajax項目上訪問some_function?我從來沒有處理過這件事,顯然是因爲這些物品沒有「渲染」,但他們無法訪問功能?

回答

1

沒有看到你代碼我猜你已經綁定了一個事件處理程序直接複選框

$('input[type="checkbox"]').click(function(event) { 
    // Your code 
}); 

爲了在創建處理程序後添加內容來完成此工作,您需要使用綁定到較低級別,未更改元素的委託處理程序,並將一個事件冒泡到複選框。我已經使用了document,不過建議將它綁定到dom節點,最有可能是複選框被添加到的ul

$(document).on('click', 'input[type="checkbox"]', function(event) { 
    // Your code 
}); 
+0

謝謝你,並感謝所有的提示。直到現在,我還真不知道事件代表團的情況。所以接下來的問題是,既然jQuery會向前推進'.on',那麼總是通過'.on'指定事件是安全的和最佳實踐? – 2013-05-10 19:37:32

+0

'.on'確實可以讓您靈活地在以後添加元素到DOM中,並且仍然保持處理程序。您還會注意到,它會讓DOM膨脹起來,如果您需要它,它也可以用於觸發不同元素上的事件。閱讀它,我會推薦使用它:) – 2013-05-10 19:41:33

+0

我做了,我會更多,所以謝謝。我在我的代碼中更改了它,一切都很好! – 2013-05-10 19:45:47

1

這是一個偉大的情況下,你可以使用jQuery的on()功能

你可以閱讀更多關於它here

1

你應該使用事件委託來處理這種場景。基本上你把處理器綁定到父ele並通過選擇器篩選以觸發處理程序。

下面是僞代碼,

$('ul').on('click', '.checkbox', function() { 
    some_function.call(this); //maintain the context if it is an external function. 
}); 
1

您需要delegate the events.

如果<div id="div1"></div>是一個動態注入元素,並要附加click事件

$('staticContainer').on('click', '#div1', some_function);