2010-08-12 113 views
1

我寫輸入按鈕用下面的代碼:jQuery的文字輸入按鈕追加

$("#QnA").append("<input type='button' name='questionSub' value='Save'/>"); 

我想做到這一點捕捉新按鈕的點擊功能。 這是我試圖:

$('input[name=questionSub]').click(function() { 
    alert('hi'); 
}); 

這不適合我。有任何想法嗎?

回答

3

你需要使用jQuery的活法爲新創建的元素

$('input[name=questionSub]').live("click", function() { 
    alert('hi'); 
}); 
+0

這工作!謝謝。 – webdad3 2010-08-12 21:38:16

1

It works for me. (jsFiddle Example)

只要確保你呼的一下功能你附加的input按鈕後。


編輯:
你只需要使用live()如果你想你追加輸入之前,因爲活(綁定的點擊功能)將一個處理程序附加到事件對於當前選擇匹配所有元素,現在是或將來

jsFiddle Example

+0

這是我的代碼太多,但它不會工作!但.live(@Marko)解決方案確實有效。謝謝。 – webdad3 2010-08-12 21:37:54

+0

@Jeff V - 如果您在嘗試綁定點擊後追加INPUT,則只需要有活動。 – 2010-08-12 21:41:01

+0

@彼得 - 你能進一步闡述一下嗎?點擊功能是在追加代碼之後。不知道這是否是你說的。 .live對我來說是新的。我在設置代碼中很可能做了一些不正確的事情。無論出於何種原因,您的提琴手示例中的代碼(與我的原始代碼相同)不起作用。 – webdad3 2010-08-12 21:53:11

3

元素被創建後,所以要確保點擊綁定時你只能一個事件綁定到一個元素在輸入被附加後。

+0

數字1不是真的,數字2 ....是,嗯...不是真的:) – Marko 2010-08-12 21:37:17

+2

@Marko - #2 *是真的,只有綁定一個事件*到元素*就可以了。 '.live()'不綁定*到元素*,它綁定到'document' :) – 2010-08-12 21:39:30

+0

好吧,我把我的downvote放回去。該死的你Craver :) – Marko 2010-08-12 21:41:19

3

當你創建你可以附上點擊處理,像這樣:

$("<input type='button' name='questionSub' value='Save'/>").click(function() { 
    alert('hi'); 
}).appendTo("#QnA"); 
+0

我可能可以做到這一點,但代碼可能比警報更多地涉及。 – webdad3 2010-08-12 21:40:03

+0

@Jeff V很可能是真的。如果你想保留可見性,你可以把你的代碼放在一個函數中並調用該函數 - 這是一個設計選擇,但很可能這比.live更好,因爲它綁定到#QnA id,因此應該更多高於綁定到文檔的性能。 – 2010-08-12 21:45:08

+0

&@Mark - 我可能會在應用程序的不同部分使用此解決方案。謝謝! – webdad3 2010-08-12 21:56:11