jQuery (1.8) - Отмена оставшейся цепочки событий

0

У меня есть два обработчика submit, которые добавляются в следующем порядке:

Сначала это добавляется в конкретном коде страницы:

function validateOnSubmit() {
    //sacar el rojo de textfield de producto
    console.log("pre-submit");
    if (currentRestrictions == null) {
        //debe seleccionar un producto
        $("#invalidProductDialog").dialog("open");
        return false;
    } else if (!currentRestrictions.allows($("#largo").val(), $("#ancho").val(), $("#calibre").val())) {
        //hay un error de validacion
        $("#invalidDimensionsDialog").dialog("open");
        return false;
    }
}

Это добавляется позже, в макете страницы (я использую Yii Framework, хотя это не имеет отношения к вопросу):

$("form:not(.allow-double-post)").submit(function () {
      console.log("check double post...");
      if($(this).data("alreadyInput")){
            return false;
      } else {
            $(this).data("alreadyInput", true);
            // regular checks and submit the form here
            return true;
      }
});

Я тестировал их, если они запускаются в порядке (рассмотрите две инструкции журнала сообщений там), и они работают в правильном порядке (т.е. сначала validateOnSubmit, и DoublePost checker).

Тем не менее, я ожидаю, что return false в validateOnSubmit вырезает цепочку событий (т. validateOnSubmit validOnSubmit и после возвращения false функция validateOnSubmit двойных сообщений не выполняется), но после return false (какая из двух причин в функции validateOnSubmit) двойная запускается обработчик check-check. Я думал, что в jquery 1.8 с return false будет сокращена цепочка событий.

В: Как я могу обрезать цепочку событий, когда происходит одно из двух условий? т.е. условия, когда в настоящее время выполняется return false для validateOnSubmit.

Теги:

1 ответ

0
Лучший ответ

Кажется, что jQuery не режет цепочку событий, достигая return false. Ожидаемое решение должно быть:

function eventHandler(e) {
    //...
    e.stopImmediatePropagation();
    return false;
    //...
}

добавив вызов stopImmediatePropagation перед return false чтобы он оставался последовательным.

(Здесь еще одна перепаха?)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню