y'a plusieurs solutions, en voici une qui marche (au moins) sous ie.
deux problèmes :
1) analyser tous les champs
2) voir si leur valeur est différente de leur valeur par défaut
1) tu passes par la hiérachie du document : ie du code comme
<form name='myForm'>
<input ...
<select ...
</form>
est accessible en script en utilisant myForm. cette variable contient des pointeurs vers l'élément parent, et vers ses enfants.
ie
myForm.parentNode accède à l'élément parent
myForm.firstChild accède au premier fils
myForm.firstChild.nextSibling accède au second fils
de mémoire, tu peux même récupérer la liste des fils avec myForm.children[i], ou i est un entier compris entre 0 et myForm.children.length.
ensuite, il faut faire la différence entre les inputs et le texte. par ex :
<form id='myForm'>
<b>veuillez entrer du texte : </b>
<input>
</form>
myForm.firstChild pointera vers <b>veuillez ... </b>. pour faire le tri, il suffit de tester le nom des nodes : myForm.firstChild.tagName et regarder ce que tu veux tester (ici, == 'input' (ou 'INPUT', teste voir)).
2) maintenant, tester si c'est la valeur par défaut. la façon la plus simple est de l'encoder dans la balise en créant un attribut avec le nom de ton choix :
<form id='myForm'>
<input defaultvalue='valeurpardéfaut'>
tu peux donc tester si myForm.firstChild.defaultvalue == myForm.firstChild.value.
//
après réflexion, myForm.firstChild va vraissemblablement renvoyer la première node fils de la form, ie une node texte vide. donc passe par myForm.children[i].
le coup de la valeur par défaut encodée dans la balise marche sous ie, je ne sais pas si ça marche ailleurs. sinon, tu peux carrément écrire ton formulaire en javascript, ou créer un tableau global qui contient les valeurs par défaut de tes inputs.