2011-01-25 93 views
0

我知道主題不明確,但我找不到更好的句子。舊的jquery點擊處理程序仍然在ID變更後仍處於活動狀態

我正在構建一個ajax表單。目前我可以通過點擊保存按鈕將表單域保存爲db,並從db獲取值編輯按鈕。我也改變#id 保存按鈕編輯按鈕點擊。但按鈕仍然是這樣的保存按鈕但是我改變它的#id。

這裏是我的按鈕:

<a class="btn" id="save_post">Save Post</a> 

當我編輯按鈕單擊更改表單值,改變後保存按鈕#ID;

$('#save_post').attr('id','edit_save_post'); 

畢竟,Firebug顯示一切正常,#id改變。

<a class="btn" id="edit_save_post">Save Post</a> 

但是,當我點擊按鈕它不運行更新數據庫,它再次運行保存。如何讓瀏覽器忘記舊的#id?

感謝,

+0

你試圖改變dinamically功能綁定改變「身份證'屬性?我認爲這是不可能的。另一種解決方案是刪除元素'edit_save_post'並用新的ID創建一個新元素。 – 2011-01-25 14:19:39

+0

@Fran維羅納我解決了.live函數的問題。感謝幫助。 – Kemal 2011-01-25 14:28:49

回答

6

你最有可能使用$('...').click(yourfunction); 使它們結合在這個非常時刻匹配的元素綁定您的處理程序。

如果要添加/動態變化的元素,使用現場活動:$('...').live('click', yourfunction);

更新:

.live()是現在已經過時;使用$(ancestor).on('click', 'selector', yourfunction)而不是ancestor是已存在的元素或選擇器,幷包含selector所選的相關元素;模仿.live()你會使用document作爲祖先。

0

我想說的是,而不是使用一個按鈕,並重命名它來創建兩個按鈕,並根據當前頁面模式顯示和隱藏它們。這樣你就不必做任何事情,比如改變可能最終導致你在以後的日子裏混淆的ID。

+0

感謝您的幫助。我也在想這個。它看起來也是一個簡單的方法。現在我將使用.live功能。謝謝。 – Kemal 2011-01-25 14:24:19

1

這聽起來像你一定做了什麼樣

$('#save_post').click(function() { $.post() // save form stuff }); 

如果是這樣的情況下,改變ID將無法正常工作。點擊事件綁定到元素本身,而不是ID。所以行爲不會改變。

雖然你可以做一個活動綁定或解除綁定並重新綁定行爲,但我認爲最簡單的方法只是在同一個地方有兩個按鈕,而不是現在你在做什麼,使用jQuery到toggle()他們的顯示。它對用戶來說看起來是一樣的,但是你可以分別識別和綁定按鈕。

+0

我正在使用$ .ajax(),但正如你所說的問題是使用$('#save_post')。click(function()... @ ThiefMaster的解決方案已經足夠了,謝謝。 – Kemal 2011-01-25 14:22:24

1

函數綁定到頁面加載(通常)上的元素。你可以做如下:

1)。從按鈕解除綁定()「保存」功能,然後綁定新的「編輯」功能。

2)使用jQuery .live()將函數綁定到「編輯」按鈕。

3)將函數綁定到父元素單擊事件(例如,保存按鈕的「div」元素)。通過事件(像.click(function(event){...});),該函數,檢查是否被點擊按鈕(if (event.target.nodeName == 'BUTTON'),做你的邏輯(if ($(event.target).hasClass('edit')) {....}) 我建議第三選項:)

相關問題