Bonjour
J'essaie d'ajouter une validation ajax avant le changement d'un onglet:
select : function doit renvoyer true of false pour autoriser ou non la sélection de l'onglet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }); } });
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Partager