2012-03-19 3 views
0

Я хочу выполнить запрос ajax прямо перед отправкой моей формы, а затем инициировать отправку формы из моего обратного вызова ajax. Но когда я пытаюсь вызвать отправке, я получаю следующее сообщение об ошибке:Запуск формы отправки изнутри обратного вызова AJAX с использованием jQuery

Uncaught TypeError: Property 'submit' of object # is not a function

Вот весь код:

<form id="myform" method="post" action="http://www.google.com" > 
     <input type="text" name="email" id="test" size="20" /> 
     <input id="submit" name="submit" type="submit" value="Submit" /> 
    </form> 

    <script> 

    function do_ajax() { 

     var jqxhr = $.get("#", function(){ 

      // Once the ajax function is complete, I want to submit my form: 
      $('#myform').submit(); 

     }); 
    } 

    $(function() { 

     $('#submit').click(function (e) { 


      // When the user clicks submit, I want to perform an ajax request first: 
      e.preventDefault(); 
      do_ajax(); 

     }); 
    }); 

</script> 

Тупик.

+0

Вы пробовали записывать $ ("# submit") на консоль, чтобы увидеть, действительно ли она содержит форму? – gpasci

ответ

2

Я думаю, проблема в том, что кнопка отправки мешает ее имени. Я кое-что прочитал об этом, будет ли ссылка Google.

Просто измените имя и идентификатор и он будет работать:

<input id="submit2" name="submit2" type="submit" value="Submit" /> 
+0

Simon- спасибо, пробовал это, но ничего. – Yarin

+0

Хм, вы не избавляетесь от этой ошибки? Я получил ту же ошибку, что и вы в этой версии: http://jsfiddle.net/vW322/1/, но когда я изменил название кнопки отправки, она работает http://jsfiddle.net/vW322/2/ (Но вы не можете публиковать в Google внутри jsfiddle, чтобы он добавил другое сообщение) –

+0

О, подождите! .. – Yarin

1

Из примера я не совсем понятно, что вы хотите сделать так или иначе обрабатывать событие представляет:

$("#formId").submit(function() { 
    // Do here whatever you want 
    return false; 
}); 

И уволить Подавать с щелчком на другом объекте (не кнопку отправки).

$("#another").click(function() { 
    $('#formId').submit(); 
}); 

Я предлагаю вам идентификатор в форму (страница может иметь несколько форм), и что вы проверяете линию с get("#"). Что делать?

+0

Адриано - эти предложения не решают проблему. Мой код упрощен, например, ради. См. Мои изменения. Я прокомментировал код, чтобы сделать цель понятной: выполните функцию AJAX перед отправкой формы. – Yarin

0

Это должно работать, как ваш вызов функции внутри AJAX обратного вызова, не испытывалась и не может быть наиболее элегантное решение, но здесь идет ..

(function($){ 

    $(function(){ 

     var evtListner = function(){ 
      $("#submit").on('click', function(e){ 
       e.preventDefault(); 
       do_ajax($(this)); 
      }); 
     } 

     var do_ajax = function(scope){ 
      var scope = scope; 
      $.get('#', function(){ 
       submit_it(scope); 
      }); 
     } 

     var submit_it = function(scope){ 
      scope.submit(function(){ 
       // 
      }); 
     } 

     evtListner();//initial call 
    }); 

})(jQuery); 
+0

Спасибо, но мой мозг может обрабатывать только 3 уровня вложенных функций. ;) – Yarin

Смежные вопросы