2013-04-21 193 views
1
var elms = $('.selector', list); 
elms.off(); 
elms.on('vclick', function(event, ui) { 
     event.preventDefault(); 
     var elm = $(this); 
     customEventHandler(elm, elm.attr("id")); 
}); 

如果我通過$('.selector', list).on('click',...)將點擊事件綁定到列表中的元素,它工作正常。jQuery .on點擊第二次不工作

如果我在做.append()後添加元素到列表中並再次調用$('.selector', list).on('click',...)沒有觸發點擊。即使我之前使用.off()刪除舊事件。

任何想法或建議嗎?

+0

什麼是c.onclick?那是一個常量變量嗎?我認爲.on()函數的第一件事是一個映射到事件名稱的字符串。就像「點擊」一樣。 – Jazzepi 2013-04-21 18:34:30

+0

是否在追加元素後刷新列表? – Omar 2013-04-21 19:17:34

+0

是的list.trigger(「創建」);綁定事件後... – 2013-04-21 19:20:20

回答

1

終於找到了問題,我不得不在調用list.trigger(「create」)後綁定事件。而不是之前,也許這對任何人都有幫助...

5

試試這個方法: - Fiddle

$('.container').on('click', '.selector', function(event, ui) { 
     event.preventDefault(); 
     var elm = $(this); 
     alert(elm.index()); 
}); 

可以使用delegated events辦法做到這一點。

委託事件有優勢,他們可以處理來自被添加到該文件在稍後的時間後代元素的事件。通過選擇在委託事件處理程序附加時保證存在的元素,可以使用委派事件來避免頻繁附加和刪除事件處理程序的需要。該元素可以是模型 - 視圖 - 控制器設計中的視圖的容器元素,例如,如果事件處理程序想要監視文檔中的所有冒泡事件,則可以是文檔。在加載任何其他HTML之前,文檔元素在文檔的頭部可用,因此在不等待文檔準備就緒的情況下在其中附加事件是安全的。

+1

Woah ...你快! :P – 2013-04-21 18:34:55

+0

這個接下來的原因,我會檢查委託事件的做法! – 2013-04-21 18:38:29

+0

是的,嘗試用Jqmobile vclick替換點擊。應該可以工作 – PSL 2013-04-21 18:41:11

0

用'click'代替c.onclick。使用正確的格式。

$('.container').on('click', '.selector', function(event, ui) { 
    event.preventDefault(); 
    var elm = $(this); 
    alert(elm.index()); 
}); 
+0

對不起忘了提及c.onclick是JQM vclick的一種常量。我編輯我的帖子。 – 2013-04-21 18:35:41

+0

好的......但是這個工作嗎? – 2013-04-21 18:41:57

+0

否...不起作用 – 2013-04-21 19:05:47