Détecter les modifications lors d’une saisie

Javascript/AJAX Ajouter un commentaire

Grand sujet que l’édition de contenu par l’utilisateur, via une administration de site. La plupart de ces sites comportent des formulaires dédiés à la saisie ou l’édition d’une donnée, mais que se passe t’il lorsque l’utilisateur ferme la fenêtre ou clique sur un lien présent dans la page ?

Voici une solution assez facile à mettre en oeuvre dans la page, résidant dans l’utilisation d’une somme MD5 de tous les champs de formulaires intéressants (champs textes, boutons radios, cases à cocher, listes déroulantes…). Une librairie MD5 peut être trouvée sur ce site.

Première étape : on concatène les valeurs des champs dans une variable

var tags = new Array("INPUT", "TEXTAREA", "SELECT");
var content = "";
 
for (var tag in tags) {
	var nodes = document.getElementsByTagName(tag);
 
	for (var i = 0; i < nodes.length; i++) {
		if (tag == "INPUT" || tag == "TEXTAREA") {
			content += nodes[i].value;
			continue;
		}
 
		if (tag == "SELECT" && nodes[i].selectedIndex != -1) {
			content += nodes[i].options[nodes[i].selectedIndex].value;
		}
	}
}

A l’initialisation de la page, faites une première somme MD5 des valeurs concaténées. Son résultat correspondra à l’état initial de la page.

var initialSum = "";
 
window.onload = function() {
	var content = getContent(); // C'est le bout de code du paragraphe précédent
	initialSum = calcMD5(content);
}

Lorsque l’on quitte la page, reconcaténez les valeurs, refaites la somme MD5 et comparez :

window.onunload = function() {
	var content = getContent();
	var finalSum = calcMD5(content);
 
	if (finalSum != initialSum) {
		return confirm('Attention : des données ont été modifiées. ' +
				'Etes-vous sûr de vouloir continuer ?');
	}
 
	return true;
}

Il reste un petit détail significatif. La validation du formulaire en lui même déclenche également l’évènement unload de la fenêtre ! Voici la parade :

document.getElementById('monFormulaire').onsubmit = function() {
	window.onunload = null;
}

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in