2013-06-28 45 views
0

我有一個表單,一旦提交,就使用$('#search_form').submit(function(){# execute code here});執行一些jQuery。後來在代碼中,我用$('#search_form').attr('id', 'tags_form');更改了表單的ID。然後,當表單被觸發時,我有一段不同的代碼。問題是,當我用新的ID提交表單時,它仍會觸發舊的.submit()更改id後由jQuery觸發的Javascript表單

+3

更改元素的屬性或屬性或其內容不會更改綁定到它的事件。 –

回答

3

更改元素的id不會從中刪除現有的處理程序。首先解除綁定:

$('#search_form').unbind('submit'); 
+0

+1是的我錯過了它的無束縛部分。 – PSL

1

當然是的,因爲當您在啓動時使用新ID tags_form限制事件時,它不僅存在。所以事件綁定在那裏沒有效果。

改爲嘗試使用事件委託或更改id後綁定事件,或者爲元素分配類名並將事件綁定到類名而不是id。

$(document).on('submit', '#tags_form, #search_form', function(){# execute code here}); 

或者:

$('.myFormClass').submit(processForm); //where the classname on form is myFormClass 

或者:

說你的事件是這樣的:

$('#search_form').on('click', processForm); // or $('#search_form').click(processForm); 

後來:

// some code... 
$('#search_form').off('submit'); // unbind the handler or $('#search_form').unbind('click'); 
//In the Code block that changes the id 
$('#tags_form').on('submit', processForm); // bind the handler to new element 
+1

這個解決方案是否也阻止舊功能被觸發? –

+0

或者您可以像上面的答案那樣解除舊事件。 – Amja

+0

@AndrewPeacock是的好點.. – PSL