J'ai un problème avec mon formulaire jquery. Si vous regardez ceci violon lorsque je crée mon formulaire, vous remarquerez qu'après la création d'un champ de saisie, puis sa suppression, les messages d'alerte commencent à apparaître sur l'élément suivant (en dessous de l'endroit où ils sont initialement placés).
Pour clarifier : si l'utilisateur n'a pas encore saisi d'informations, les alertes s'affichent à la bonne place (à droite du champ de saisie, en texte rouge). En revanche, si l'utilisateur a saisi des informations, puis les supprime, l'alerte ajax ("ce champ est obligatoire") s'affiche au mauvais endroit, dans le champ situé en dessous de l'endroit où elle est censée s'afficher. Pour visualiser le problème, saisissez tous les champs correctement, puis supprimez votre nom. Le message "ce champ est obligatoire" apparaît dans le champ de l'adresse électronique, alors qu'il devrait se trouver dans le champ du nom.
Le js qui contrôle la validation est :
$(document).ready(function() {
$('#commentForm').validate({
submitHandler: function(form) {
$.ajax({
type: 'POST',
url: 'process.php',
data: $(this).serialize(),
success: function(returnedData) {
$('#commentForm').append(returnedData);
}
});
return false;
},
errorPlacement: function(error, element) {
error.insertAfter( element).position({
my:'right top',
at:'right top',
of:element
});
}
});
});
EDIT 1 : L'utilisation du mode Jquery NoConflict n'a pas résolu ce problème. Il semble en effet qu'il s'agisse d'un problème lié à la manière dont les deux plugins fonctionnent ensemble.
EDIT 2 : Il y a en fait deux solutions à ce problème. La première consiste à inclure le script script de jquery UI dans l'en-tête, ce qui permet à son utilitaire 'position' d'aligner les messages d'erreur en haut à droite.
L'autre solution, comme l'ont fait remarquer d'autres contributeurs, consiste à modifier le code CSS pour qu'il soit défini comme suit
form p {
position: relative; /* This ensures error label is positioned within the p tag */
}
label.error {
top: 0; /* This ensures that it lines up with the top of the input */
right:90px;
color: red;
position:absolute;
}
Merci pour tous les commentaires.