Могу ли я получить общий результат нескольких обработчиков .submit ()? - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть форма с несколькими подтверждениями .submit. Я хотел бы зарегистрировать обработчик, который может что-то делать, если общий результат был ложным.

Вот очень простой фрагмент, который иллюстрирует, что я хотел бы сделать ...

$("#myForm").submit(function() {
    if (conditionA)
    {
        return true;
    }
    else {
        return false;
    }
});

$("#myForm").submit(function() {
    if (conditionB)
    {
        return true;
    }
    else {
        return false;
    }
});

    // TODO: Have some event here that knows if Collective result of .submit was true or false
    $("#myForm").submitParentHandler(function (collectiveResult) {
        if (collectiveResult) {
            alert("Form will be submitted");
        }
        else {
            alert("Form will NOT be submitted");
        }
    });

Там, где последний метод в настоящее время является просто макетом того, что я хотел бы.

1 Ответ

4 голосов
/ 16 сентября 2011

Я думаю, вам просто нужно перестроить решение. Вместо регистрации нескольких обработчиков отправки, вместо этого зарегистрируйте методы, которые содержат логику проверки, например так:

 var submitHandlers = [];

 $('#myForm').submit(function()
 {
      var isValid = true;
      $(submitHandlers).each(function()
      {
           isValid = isValid && this();
      });

      return isValid;
 });

Тогда вы просто зарегистрируете методы проверки для вызова:

submitHandlers.push(function()
{
      return conditionA;
});

submitHandlers.push(function()
{
     return conditionB;
});

Когда вы нажимаете кнопку Отправить, он запускает все методы в submitHandlers, и если все они возвращают значение true, вы продолжаете. Если какой-либо из них вернул false, вы бы вернули false из обработчика отправки.

...