2013-09-21 118 views
2

我有一個簡單的表單提交,成功後我有一個提醒和一個清除表單的調用。我確實收到警報,信息已成功添加到數據庫中,但第二次調用 - 要清除表單沒有執行。我確信這是簡單的我做錯了,但我無法弄清楚。AJAX成功回調只執行第一個功能

$('#contact_submit').click(function(e){ 
       if ($("#submit_form_contact").valid()) { 


        var post_data = { 
         "name" : $('#name').val(), 
         "email" : $('#email').val(), 
         "inquiry" : $('#inquiry_dropdown option:selected').text(), 
         "message" : $('#message').val() 
        }; 


        $.ajax({ 
         type: "POST", 
         url: "process-contact.php", 
         data: post_data, 
         success: function(data) { 
         alert("Thank you for contacting us."); 
         $('#submit_form_contact').reset(); 
         } 
        }); 

        e.preventDefault(); 

       } 

此外,提交按鈕只是一個按鈕,而不是提交輸入。是否有必要preventDefault()?我是新來的。

+0

嘗試增加'的console.log($( '#submit_form_contact'));'警報和復位之間。在日誌裏面應該有一個''''你可以點擊來展開這個對象。看看它是否看起來像一個表單對象並具有重置方法。如果它沒有reset()方法或者在日誌中推送了null或undefined,那麼您已經確定了問題。 – Paul

+0

通過「只是一個按鈕」你的意思是'

+0

啊! Uncaught TypeError:Object [object Object]沒有方法'reset'。我不完全明白 - 這是表格的ID –

回答

3

jQuery沒有.reset()方法。

而是執行此操作:

$('#submit_form_contact')[0].reset(); 

這抓住了第一個DOM元素,並調用本機.reset()。如果有任何機會,表單將不會被找到,然後測試元素。

var f = $('#submit_form_contact')[0]; 

if (f) 
    f.reset(); 

當然,你並不真正需要的jQuery通過ID獲取元素,特別是如果你不打算使用任何jQuery方法。

var f = document.getElementbyId('submit_form_contact'); 

if (f) 
    f.reset(); 

另一種方法是設置提交按鈕作爲Ajax調用的context:,然後用其form屬性。

   $.ajax({ 
        context: this, 
        type: "POST", 
        url: "process-contact.php", 
        data: post_data, 
        success: function(data) { 
        alert("Thank you for contacting us."); 
        this.form.reset(); 
        } 
       }); 
+0

非常好,我感謝您的幫助! –

+0

適用於上下文。沒有意識到這個選擇。 – Paul

0

這條線可以用來太

$("#submit_form_contact").trigger('reset');