Jquery UI Tabs et Ajax Validation
Bonjour
J'essaie d'ajouter une validation ajax avant le changement d'un onglet:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
$("#tabs").tabs( {
select : function(event, ui) {
$("#loadingDiv").show();
$.ajax( {
async : false,
url : "/creatures/Creatures/ajax_validate",
type : "POST",
processData : true,
dataType : "json",
data : $("#CreatureEditForm").serializeArray(),
success : afterValidate
});
}
}); |
select : function doit renvoyer true of false pour autoriser ou non la sélection de l'onglet.
Mais j'obtiens le résultat de ma validation dans la fonction afterValidate.
J'ai trouvé une solution de bidouilleur : ajouter un champ input caché. Je met une valeur par défaut avant la validation. Dans la fonction afterValidate, je change la valeur s'il y a des erreurs.
Je pense qu'il doit y avoir un moyen plus simple et plus propre surtout.
A tout hasard, voici le code de ma fonction afterValidate:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| function afterValidate(data, status) {
if (data.errors) {
$("div.error-message").attr("title", "error");
$.each(data.errors.data, function(model, errors) {
for (fieldName in this) {
var inputID = camelize(model + "_" + fieldName);
var element = $("#" + inputID);
var elementError = $("#" + inputID + "_error");
if (elementError.length > 0) {
elementError.text(this[fieldName]);
elementError.effect("shake", {
times : 2,
distance : 10
}, 150);
elementError.removeAttr("title");
} else {
var _insert = $(document.createElement("div"))
.addClass("error-message");
_insert.attr("id", inputID + "_error");
_insert.text(this[fieldName]).hide().insertAfter(
element);
_insert.slideDown(200);
}
}
});
$("div.error-message[title=error]").slideUp(200, function() {
$(this).remove();
});
} else
$(".error-message").hide();
$("#loadingDiv").hide();
} |