Bonjour à tous !

Voici mon souci : il s'agit de traduire un texte d'une langue source vers une ou plusieurs langue cibles.
La langue source doit être unique, c'est donc une list :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
<select name="source"  onChange="activerCibles(this.form, 'cibles[]', this.value)">
	<option value="francais"<?php if($source =='francais') echo 'selected="selected"';?>> Fran&ccedil;ais</option>
	<option value="italien"<?php if($source == 'italien') echo 'selected="selected"';?>> Italien</option>
	<option value="anglais"<?php if($source == 'anglais') echo 'selected="selected"';?>> Anglais</option>
	<option value="allemand"<?php if($source == 'allemand') echo 'selected="selected"';?>> Allemand</option>
	<option value="portugais"<?php if($source == 'portugais') echo 'selected="selected"';?>> Portugais</option>
	<option value="espagnol"<?php if($source == 'espagnol') echo 'selected="selected"';?>> Espagnol</option>
</select>
Le test sur la variable php $source est là pour qu'après soumission du formulaire, la valeur sélectionnée elle

Les langues cibles peuvent être multiples, ce sont donc des checkbox :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
<label><input type="checkbox" name="cibles[]" value="francais" <?php if(preg_match('/francais/', $liste_cibles)==true) echo 'checked="checked"';?>  onClick="Compter(this.form.nb_mots.value,this.form)"/>Fran&ccedil;ais</label>
<label><input type="checkbox" name="cibles[]" value="anglais"   <?php if(preg_match('/anglais/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Anglais</label>
<label><input type="checkbox" name="cibles[]" value="italien"   <?php if(preg_match('/italien/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Italien</label>
<label><input type="checkbox" name="cibles[]" value="portugais" <?php if(preg_match('/portugais/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Portugais</label>
<label><input type="checkbox" name="cibles[]" value="espagnol"  <?php if(preg_match('/espagnol/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Espagnol</label>
<label><input type="checkbox" name="cibles[]" value="allemand"  <?php if(preg_match('/allemand/', $liste_cibles)==true) echo 'checked="checked"';?> onClick="Compter(this.form.nb_mots.value,this.form)"/>Allemand</label>
La fonction "Compter(this.form.nb_mots.value,this.form)" est une fonction Javascript qui permet de compter le nombre de jours nécessaires à la traduction.

Cependant il y a plusieurs contraintes :
- la langue source et la langue cible ne peuvent être identiques. Pour l'instant je fais ce contrôle en php à la validation du formulaire. Mais étant données les contraintes suivantes, je souhaiterais le faire en Javascript.
- j'ai des combinaisons de langues sources/cibles définies :
FR vers (it, angl, esp, all, port)
(it, angl, esp, all, port) vers FR

Je souhaiterais donc :
  • au tout premier affichage du formulaire, la langue source "francais" est sélectionnée je souhaite donc que dans les langues sources :
    • le francais soit grisé et non sélectionnable
    • les autres langues (it, angl, esp, all, port) sont dipsonibles et cliquables
  • quand on sélectionne le français en langue source :
    • le francais est grisé et non sélectionnable
    • les autres langues (it, angl, esp, all, port) sont dipsonibles et cliquables
  • quand on sélectionne une des langues (it, angl, esp, all, port) en langue source
    • le francais est dipsonibles et cliquables
    • les autres langues (it, angl, esp, all, port) sont grisés et non sélectionnables

J'avais fait un test avec la fonction "activerCibles(this.form, 'cibles[]', this.value)" que vous voyez sur le onChange de ma liste, mais sans succès.

Voici le détail de cette fonction :

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
33
34
35
36
37
 function activerCibles(form,inputName,source) {
	switch (source) { 
		case 'francais': 
			form.cibles['francais'].disabled='true';
			form.cibles['italien'].disabled='false';
			form.cibles['anglais'].disabled='false';
			form.cibles['espagnol'].disabled='false';
			form.cibles['allemand'].disabled='false';
			form.cibles['portugais'].disabled='false';
			break; 
		case 'italien': 
		case 'anglais': 
		case 'espagnol':
		case 'allemand': 	
		case 'portugais': 
			form.cibles['francais'].disabled='false';
			form.cibles['italien'].disabled='true';
			form.cibles['anglais'].disabled='true';
			form.cibles['espagnol'].disabled='true';
			form.cibles['allemand'].disabled='true';
			form.cibles['portugais'].disabled='true';
			break;
	}
	var inputs = form.elements[inputName];
 
	for (var i = 0; i < inputs.length; i++) {
		var input = inputs;
		alert(input.value);
			if (input.value == source) {
				input.disabled = true;
				input.checked = true;
			}
			else {
				input.disabled = false;
			}
	}
}
Pourriez-vous m'aider ?


Merci beaucoup