Rails 3 плагин валидации Jquery - PullRequest
1 голос
/ 12 января 2011

У меня есть этот код js

$(".new_milestone").validate({
     submitHandler: function(form) {
    $(form).submitWithAjax();
   },
     errorPlacement: function(error, element) {
        error.insertBefore(element);
     }
   });  

Все это работает, errorPlacement и функция submitWithAjax.Но когда я отправляю форму второй раз, не перезагружая страницу, форма публикуется два раза.В следующий раз 3 раза и т. Д.

Когда я делаю это

 $(".new_milestone").validate({
             errorPlacement: function(error, element) {
                error.insertBefore(element);
             }
           });
$(".new_milestone").submitWithAjax(); 

Это работает, но делает сообщение ajax, даже если форма недействительна.Функция submitWithAjax выглядит следующим образом (спасибо Райану Бейтсу)

jQuery.fn.submitWithAjax = function() {
  this.submit(function() { 

    $.post(this.action, $(this).serialize(), null, "script");
    $('.spinning').show(); 
    $("#dialog_form").dialog("close")
    return false;
  })
  return this;
};

Есть идеи по прекращению такого поведения?

1 Ответ

1 голос
/ 12 января 2011

Это происходит потому, что ваша ssubmitWithAjax функция * не * фактически * отправляет (запускает событие), она присоединяет обработчик отправки , когда происходит submit (что делает нормальное поведение) ... так как вы вызываете его в ситуации отправки, просто удалите упаковщик обработчика и фактически отправьте, как показано ниже:

jQuery.fn.submitWithAjax = function() {
  $.post(this.attr("action"), this.serialize(), null, "script");
  $('.spinning').show(); 
  $("#dialog_form").dialog("close")
  return false;
};

Обратите внимание на изменение .attr("action"), поскольку this не являетсяОбъект jQuery, а не элемент <form> DOM, поскольку он находится непосредственно в плагине.


Ранее вы каждый раз подключали дополнительный обработчик * submit, поэтому выget 1, 2, 3 .... отправляет, просто вызвав нужный код отправки, этого не произойдет, поскольку внутри submitHandler есть действительное место для продолжения и отправки в любом случае.

КакКроме того, функция обратного вызова для $.post() является необязательной, поэтому вы можете оставить эту null,, и она будет работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...