отменить отправку события в обратном вызове AJAX - PullRequest
1 голос
/ 04 июля 2011

Если флажок не установлен, я предупреждаю и запрещаю отправку формы (нажмите кнопку «Отправить» или «Ввод») с привязкой false. Мне нужно отменить привязку в обратном вызове AJAX, но я не могу этого сделать.

HTML:

<form action="act.php" onsubmit="formSubmit()" id="TypeForm" name="TypeForm" method="POST">
<label>
<input type="radio" name="Type" value="1">
<span>Type 1</span>
</label>
<label>
<input type="radio" name="Type" value="2">
<span>Type 2</span>
</label>
<input type="submit" name="submit" id="submit" value="Next" />
</form>

Javascript / JQuery:

<script>
  function formSubmit() {
    var self=this;
    $(self).bind('submit', false);
    if ($('#TypeForm').find('input:radio:checked').length == 0) {
      alert('A selection is required.');
    } else {
        $.ajax({
          type: "POST",
          url: "add.php",
          success: function() {
            $(self).unbind();
          }
        });
    }
  }
</script>

Заранее спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 04 июля 2011

Хотите ли вы прекратить обычную отправку формы, когда пользователь нажимает Enter или нажимает кнопку отправки?Затем вам нужно запретить event выполнять действие по умолчанию.Попробуйте это:

function formSubmit(event) {
    var self=this;

    event.preventDefault();

    if ($('#TypeForm').find('input:radio:checked').length == 0) {
      alert('A selection is required.');
    } else {
        $.ajax({
          type: "POST",
          url: "add.php",
          success: function() {
            $(self).unbind();
          }
        });
    }
  }

Редактировать: И, как упоминает Тревор, вы должны использовать jQuery для привязки вашей функции, чтобы event был правильно настроен для работы в разных браузерах.,Код может быть:

$(function() {
  $('#TypeForm').submit(formSubmit);
});

Но я бы переписал ваш код следующим образом (НЕ проверено):

<script>

  $(function() {
    $('#TypeForm').submit(function (event) {
      var self=this;

      event.preventDefault();

      if ($(this).find('input:radio:checked').length === 0) {
        alert('A selection is required.');
        return false;
      }

      $.ajax({
        type: "POST",
        url: "add.php",
        success: function (data) {
          alert('success, data: ' + data); // optional
          // no need for this: $(self).unbind();
        }
      });
    }
  });

</script>

И удалил onsubmit="formSubmit()" из вашего HTML.

0 голосов
/ 04 июля 2011

Во-первых, var self = this;

Должно быть

var self=$(this)

Во-вторых, вы должны привязать форму к действию submit в модели событий jQuery, чтобы получить доступ к $ (this).

Пример:

$(function() { // short hand document ready call
   $('form-name').submit(function(formSubmit());
}

Кроме того, почему вы хотите отсоединить его?

0 голосов
/ 04 июля 2011

Может быть, вы забыли название события - $(self).unbind('submit');?

...