У меня есть два обработчика 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
.
Кажется, что jQuery не режет цепочку событий, достигая return false
. Ожидаемое решение должно быть:
function eventHandler(e) {
//...
e.stopImmediatePropagation();
return false;
//...
}
добавив вызов stopImmediatePropagation
перед return false
чтобы он оставался последовательным.
(Здесь еще одна перепаха?)