2010-07-16 79 views
2

我有一個叫做「pick_up_point」的單選按鈕,我有一個更改處理程序來檢測被選中的單選按鈕。在更改處理程序中,我調用基本清除輸入字段的函數「clearFields()」。jquery trigger - 'change'function

function clearFields() 
{ 
$("#Enquiry_start_point").val(""); 
$("#Enquiry_start_town").val(""); 
$("#Enquiry_start_postcode").val(""); 
} 

$("input[name='pick_up_point']").change(function() 
{ 
if($("input[name='pick_up_point']:checked").val() == "pick_up_airport") 
{ 
    $("#pick_up_airport_div").slideDown(); 
    $("#start_point_div").hide(); 
    clearFields(); 
} 
}); 

我也有一個觸發器,如果​​由於驗證錯誤而重新顯示錶單,它將保留視圖。

$('input[name=\'pick_up_point\']').trigger('change'); 

現在,當我張貼觸發運行形式和它調用的更改處理,這當然運行clearFields()函數。那麼我怎樣才能解決這個問題?當表單重新顯示時,我不希望字段被清除。

+0

當您發佈表單時,意思是當您提交表單時? – hookedonwinter 2010-07-16 16:28:17

+0

是的,當我提交表格時是正確的。如果有任何驗證錯誤,頁面會重新顯示。 – GSTAR 2010-07-16 16:51:49

+0

任何人都可以幫忙嗎?有沒有什麼辦法可以告訴jQuery表單是否已經提交或者它是否處於初始狀態? – GSTAR 2010-07-16 19:25:22

回答

5

嘗試使用自定義事件處理程序,就像這樣:

$("input[name='pick_up_point']").change(function() 
{ 
    $(this).trigger("displayForm"); 
    clearForm(); 
}); 

$("input[name='pick_up_point']").bind("displayForm", function() { 
if($("input[name='pick_up_point']:checked").val() == "pick_up_airport") 
{ 
    $("#pick_up_airport_div").slideDown(); 
    $("#start_point_div").hide(); 
} 
}); 

因此,而不是引發變化的事件,觸發定製displayForm處理程序,如:

$('input[name=\'pick_up_point\']').trigger('displayForm'); 

而現在,當change它會按預期工作,但對於不清除輸入字段而顯示錶單的特殊情況,您可以簡單地觸發新的自定義事件處理程序。

+0

哇,太棒了!謝謝。 – GSTAR 2010-07-16 20:57:34

+0

+1很好的使用自定義事件 – 2013-02-01 18:06:49