2013-09-21 3 views
2

У меня есть простая форма представления, что после успеха у меня есть предупреждение и звонок, чтобы очистить форму. Я получаю предупреждение, информация успешно добавляется в базу данных, но второй вызов - для очистки формы не выполняется. Я уверен, что это что-то простое, я делаю неправильно, но я не могу понять это.AJAX success callback только выполняет первую функцию

$('#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(); 

       } 

Кроме того, кнопка отправки - это просто кнопка, а не вход для отправки. Нужно ли предотвращатьDefault()? Я новичок в этом.

+0

Попробуйте добавить 'console.log ($ ('# submit_form_contact'));' между чекой и сбросом. Посмотрите в журнале, должен быть '>' вы можете нажать, чтобы развернуть объект. Посмотрите, похоже ли он на объект формы и имеет метод сброса. Если у него нет метода reset(), или нулевой или неопределенный вводятся в журнал, вы идентифицировали проблему. – 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, чтобы получить элемент по идентификатору, особенно если вы не собираетесь использовать любые методы JQuery.

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

if (f) 
    f.reset(); 

Другой альтернативой было бы установить кнопку отправки как context: вызова AJAX, а затем использовать его свойство 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

+1 для контекста. Не знал об этом. – Paul

0

эта линия может быть использована слишком

$("#submit_form_contact").trigger('reset'); 
Смежные вопросы