Bien le bonjour, je crois que débutant ou pas, le problème est bien loin d'être simple, en outre, j'ai peut être une solution.
je me suis appuyé largement sur les sources fournit, donc, j'espère que la compatibilité devrait être ok, sinon, il va falloir adapté.
on va commencer par mettre un bout de code:
Code HTML :
<html>
<head>
<script type="text/javascript">
function checkUniqueValue(_sel){
// Création d'un enregistrement de type tableau
var result = new Array();
// si le select est précisé.
if (_sel){
// Valeur en cours
var currentValue = _sel.options[_sel.selectedIndex].value;
// L'ajoute de suite au tableau.
result[currentValue] = true;
}
// Récupération de toutes les combos.
var _selects = document.getElementsByTagName("select");
// parcours l'ensemble de ceux-ci
for ( var i=0; i<_selects.length; i++){
// on considère que l'on ne traite que les select qui ont un id de type: position[
if( _selects[i].id && _selects[i].id.indexOf ("position[") != -1 && ((_sel != null && _selects[i].id != _sel.id) || !_sel)) {
// Récupération de la valeur sélectionnée.
var actualValue = _selects[i].options[_selects[i].selectedIndex].value;
// y a-t-il une valeur de sélectionnée ?
if (actualValue){
// le plus simple est de tester si la valeur existe dans le tableau de résultat.
if ( result[actualValue] ){
// La, il faut informé l'utilisateur que ça va pas bien.
alert (" item selected value '"+actualValue+"' is defined for more than one select");
if ( _sel){
_sel.focus();
}
return false;
}
// sinon, il suffit de l'ajouter au tableau des résultats.
else{
// si l'on demande la validation sans passer de select, il faut tester tous les selects.
if ( !_sel){
result[actualValue] = true;
}
}
}
}
}
return true;
}
</script>
</head>
<body>
<select id="position[0]" onchange=" return checkUniqueValue(this)">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select id="position[1]" onchange="return checkUniqueValue(this)">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select id="position[2]" onchange="return checkUniqueValue(this)">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="button" value="checkValidity" onmousedown="checkUniqueValue()" />
</body>
</html>
puis je vais me risquer à une explication,
la méthode que j'ai mise en place (checkUniqueValue()) possède comme paramètre le select sur lequel l'utilisateur est positionné. Ce paramètre est optionnel, afin de pouvoir revalidé l'écran total (je n'arrive pas à rester bloqué dans une combobox (...)
s'il le paramètre est précisé, la première chose à faire est de récupérer la valeur sélectionné, puis ensuite, pour chacun des selects présents sur la page (document.getElementsByTagName("select")) si les identifiants commencent par positon[ (afin de permettre la mise en place de select qui ne doivent pas être vérifié, il suffit que leur id ne soit pas position[xx]), si la valeur est trouvée -> message d'erreur.
s'il n'est pas précisé, alors c'est l'ensemble des selects (soumis au critères id débute par position[ ) qui va être tester, il serait bon d'exécuter cette méthode au moment de la soumission du formulaire ou de la validation, c'est en quelques sorte une double vérification suite à ce message: je n'arrive pas à rester bloqué dans une combobox et je ne sais pas pourquoi.
Punaise, plus je me relis, moins je me comprends, je vais mettre ça sur le compte du vendredi 17h15.
Je suis toujours dispo pour de plus amples informations
[o-_-o]