2010-01-24 54 views
2

我正在使用js將表單元素添加到html文檔中。例如,我將一整個<form>添加到表格單元格中。例如:jquery事件不識別js添加的html組件?

<form class="add-comment"><input type="submit" /></form> 

我試着用js調用基於元素新創建的窗體中,但什麼也沒有發生的事件。我應該得到一個警告框。我在做什麼錯誤?

$('.add-comment').submit(function() { 
    alert('form submitted!'); 
}); 

謝謝。 希望我解釋得很好。

+1

這個問題在SO之前已經被問過很多次了,在請求你自己的請求之前,請嘗試尋找類似的問題。 – 2010-01-24 16:24:44

回答

6

您是否在註冊提交事件處理程序後添加元素?除非使用實時方法添加事件,否則您需要在每個新元素之後註冊事件。

$('.add-comment').live('submit', function() { 
    alert('form submitted!'); 
}); 

這會爲所有選定的元素添加事件,即使它們將來被添加。

http://api.jquery.com/live/

+2

確保爲這項技術使用最新的jQuery 1.4,因爲任何其他版本都不支持SUBMIT事件。 – 2010-01-24 16:25:56

+0

謝謝凱爾!我試着在提交事件處理程序的代碼之前和之後添加元素,但都不起作用。使用.live()事件雖然工作! :) 你是什麼意思註冊每個新元素後的事件?謝謝! – Lyon 2010-01-24 16:29:21

+0

@Dave:嗯..我使用jQuery 1.3.2,它似乎工作。我錯過了什麼嗎?謝謝:) – Lyon 2010-01-24 16:29:58

1

新創建的元素沒有連接到他們的任何事件處理程序。您必須選擇它們並在添加事件處理程序後添加事件處理程序(例如,$('.add-comment', newparent).submit(submitfunction))。

您通常可以使用.live(eventname, function)爲現有的未來創建的元素添加事件處理程序。但是,由於這些事件是如何在瀏覽器中實現的,所以不能在jQuery 1.3中使用.live('submit', ...)(技術上,它們不會「冒泡」)。

jQuery的1.4不支持livesubmit(通過一個非常醜陋的黑客)。

+0

嗨bobince,我正在使用.live('submit',function(){});這在Chrome中起作用。從你提到的,這在某些瀏覽器中不起作用?如何在添加事件處理程序後添加事件處理程序?我很抱歉,但我無法理解你的代碼。謝謝:)(我使用的是jQuery 1.3.2) – Lyon 2010-01-24 16:45:50

+0

是的,它是IE的'onsubmit',它不會冒泡(參見http://msdn.microsoft.com/en-us/library/ms536972%28VS.85% 29.aspx);許多其他事件不適用於IE或其他瀏覽器上的「live」,因此您無法在所有方面使用它。要選擇另一個元素內的元素,需要將父元素作爲上下文節點傳遞給'$(selector,context)'函數。 – bobince 2010-01-24 18:14:48

0

Kyle是對的,您應該使用實時事件將事件添加到當前和未來的DOM元素。然而,作爲替代,你可以在創建表單元素添加事件:

(jQuery的1.4樣式)對此,如果你不使用jQuery 1.4

$('<form>', { 
    id: 'myFormID', 
    name: 'myFormName' 
}).submit(function(){ alert('form submitted'); }) 
.appendTo(myDiv); 
1

我寫了一個rather long blog post 。您必須連接新添加的元素,因爲當頁面加載時它們不在那裏。它應該讓你深入瞭解.live()方法正在發生的事情。

+0

謝謝Jarrett。我關注了你的博客文章,並注意到你通過調用一個函數來連接新添加的元素。我將原來的提交方法移動到了函數中,並將其稱爲所有我添加了一個新的表單元素,並且它工作正常! :)我想這將完全在jQuery 1.3.2中工作。再次感謝! – Lyon 2010-01-24 16:53:43

1

當然,將事件添加到元素是最常見的做法。嘗試瞭解發佈/訂閱風格的事件處理,這可以取代使用實時插件。

+0

謝謝比爾。根據您的建議,我找到了LiveQuery。我使用它來觸發提交事件,模糊和一個不適用於事件委託(我認爲)的函數,而我正在使用.live()進行單擊和鍵入操作。我還發現一篇文章表明,如果事件使用.live(),則.live()對性能可能會更好。該文章是:http://groups.google.com/group/jquery-en/browse_thread/thread/432a0d9caae734db 再次感謝!我通過這一集學到了很多東西,並不是要感謝你們所有的天才:) – Lyon 2010-01-25 03:39:14