Bonjour,
Je souhaiterai lors de l'édition d'une occurrence pouvoir récupérer dans un select la valeur contenue initialement dans la table.
D'avance merci.
Bonjour,
Je souhaiterai lors de l'édition d'une occurrence pouvoir récupérer dans un select la valeur contenue initialement dans la table.
D'avance merci.
Peux tu préciser parce que là c'est très très flou...
As tu un morceau de ton code, etc ...
ERE
Bonjour,
Oui pas de soucis !
Donc je récupère sans soucis le contenu de la ligne de ma table que je veux éditer, mais par contre quand je souhaite avoir le "value" pour le select ça ne marche pas !
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
38
39
40
41
42
43
44
45
46
47
48 <tr> <td style="width:170px;"><strong>Nom de l'activité</strong></td> <td> <input dojotype="Textbox" type="text" id="activite" name="activite" value="<?php echo $infosActivite['Nom_Activite'];?>" trim="true" uppercase="false" maxlength="4" hacks="false" style="width: 300px;"/> </td> </tr> <tr> <td><strong>Pour quel diplome ?</strong><br /></td> <td colspan="3"> <select dojotype="Select" dataurl="../../data/activites/diplomes.js" style="width: 300px;" name="diplcourt" id="diplcourt" value="<?php echo $infosActivite['Nom_Dipl_Court'];?>"> </select> </td> </tr>
Salut,
2 questions avant de te répondre précisément:
- Quelle version de Dojo utilises tu ?
- Si tu utilises une version < 0.9, as tu la possibilité d'upgrader vers une 0.9+ ?
ERE
Etant donné que je travaille sur un projet déjà commencé, je n'ai donc pas télécharger dojo et ne sait pas la version.
En allant voir quelques fichiers dans la bibliothèque dojo, j'ai lu régulièrement en commentaire, que c'était la version 2.1.
Donc c'est peut être celle ci que j'utilise.
Merci.
Il n'existe pas de 2.1
0.3x
0.4x
0.9x
1.0x
1.1x
1.2x
Fais ton choix !![]()
Bon a priori vu ton code il me semble que c'est une 0.4. Ton code ne pourrait pas fonctionner en 0.9+.
Peux tu ajouter ce code pour tester ta valeur retournée:
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 //ajouter cette focntion JS function displayValue(val){ alert('Valeur:' +val); } //modifier ton select <select dojoType="Select" dataUrl="../../data/activites/diplomes.js" style="width: 300px;" name="diplcourt" id="diplcourt" value="<?php echo $infosActivite['Nom_Dipl_Court'];?>" onValueChanged="displayValue"> </select>
Vérifie qu'il t'affiche la valeur attendue.
Et peux tu poster un bout de ton fichier diplomes.js qui doit être je pense un tableau JS ?
Merci de ton aide.
Après test je n'obtiens pas de résultat.
Voici le code de mon fichier diplome.js.
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 [ ["BEP METIERS PRODUCTION MECANIQUE INFORMATISEE","BEPMPMI"], ["CAP AGENT POLYVALENT DE RESTAURATION","CAPAPR"], ["BAC PROFFESSIONNEL ESTETHIQUE COSMETIQUE PARFUMERIE","BACPROECP"], ["BEP CONDUITE ET SERVICES DANS LE TRANSPORT ROUTIER","BEPCSTR"], ["CAP AGENT D''ENTREPOSAGE ET DE MESSAGERIE","CAPEM"], ["BAC PROFESSIONNEL LOGISTIQUE","BACPROLOG"], ["MENTION COMPLEMENTAIRE ESSAYAGE RETOUCHE VENTE","MCERV"], ["BEP CARRIERES SANITAIRES ET SOCIALES","BEPCSS"], ["BEP METIERS DE LA COMPTABILITE","BEPMC"], ["BEP VENTE ACTION MARCHANDE","BEPVAM"], ["BEP METIERS DE L''HYGIENE","BEPMHPE"], ["CAP MAINTENANCE ET HYGIENE DES LOCAUX","CAPMHL"], ["CAP METIER DU PRESSING","CAPMP"], ["BAC PROFESSIONNEL COMPTABILITE","BACPROCOMP"], ["BAC PROFESSIONNEL SECRETARIAT","BACPROSEC"], ["BAC PROFESSIONNEL COMMERCE","BACPROCOMM"], ["BAC PROFESSIONNEL SERVICES DE PROXIMITE ET VIE LOCALE","BACPROPVL"], ["BEP METIERS DE LA MODE","BEPMM"], ]
Tu dois avoir un résultat: si la boite de message ne s'affiche pas c'est qu'il y a une erreur JS quelque part. Peux tu la renvoyer stp ?
Et au passage quel navigateur utilises tu pour ton dev ? IE ? Si oui, peux tu essayer de faire un test avec Firefox ?
J'ai mis la fonction que tu m'as donnée dans un fichier .js que j'appelle au début de ma page ou je souhaite récupérer une valeur.
J'utilise FF, étant sous linux je ne teste pas sous IE (pour le moment).
Effectivement le "alert" qui devrait m'ouvrir une boite de dialogue ne s'affiche pas du tout !
Le code JS que tu as initialement écrit semble correct.
L'erreur peut donc provenir de n'importe où.
Et si tu ne vois pas la boite de message quand tu sélectionnes une un élément de la combo, il te faut tracker l'erreur JS qui a dû être déclenchée. Sans celle-ci cela va être difficile à cerner.
En fait quand je selectionne j'ai bien la boite d'alerte qui me donne le diplome sélectionné !
Sauf qu'au départ de la page, j'ai toujours le select qui est vide. Le contenu du champ dans ma table n'est pas visible. Ce qui fait que quand je souhaite éditer ma page, on ne voit pas quel diplome l'on doit éditer.
Merci.
Salut,
Effectivement après avoir regardé le code source du Select dans Dojo 0.4 il n'existe aucun moyen de sélectionner par défaut une valeur d'un widget
Select. La seule solution que j'entrevois c'est de ton créer propre widget qui effectue ça. Allons y.
Il y aurait la possibilité de créer ton propre Widget dans ton propre Namespace, mais cela sortirait du cadre ici, donc je te propose de faire
au plus simple, à savoir modifier le code source original de Dojo pour ajouter la fonctionnalité.
- La première chose à comprendre c'est que l'attribut value mis dans la balise Select est ignoré par Dojo.
- D'un autre côté le Select dispose d'une fonction setAllValues(label, value) qui affiche le texte "label" et affecte la valeur en cours à "value"
- Toute propriété d'un widget est automatiquement affecté par son attribut associé si celui-ci existe; Autrement dit si tu écris <select dojoType="Select" initValue="CAPMHL" ... > alors dojo va essayer d'initialiser le widget en cherchant à affecter la propriété "initValue" avec la valeur "CAPMHL"
Concrètement, tu vas aller dans les sources de Dojo, et trouver ce fichier: src/widget/Select.js
Et tu remplaces le code existant par celui-ci (je t'ai mis les commentaires):
Tu peux maintenant changer ta balise Select Dojo ainsi (attention j'ai changé le path des datas pour mon test):
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 dojo.provide("dojo.widget.Select"); dojo.require("dojo.widget.ComboBox"); dojo.require("dojo.widget.*"); dojo.require("dojo.widget.html.stabile"); dojo.widget.defineWidget("dojo.widget.Select", dojo.widget.ComboBox, { /** * Ajout pour gérer les valeurs initiales * Pour êre utilisé, créer les attributs associés dans le code HTML de la balise */ initValue:"", initText:"", forceValidOption:true, setValue:function (value) { this.comboBoxValue.value = value; dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true); this.onValueChanged(value); }, setLabel:function (value) { this.comboBoxSelectionValue.value = value; if (this.textInputNode.value != value) { this.textInputNode.value = value; } }, getLabel:function () { return this.comboBoxSelectionValue.value; }, getState:function () { return {value:this.getValue(), label:this.getLabel()}; }, onKeyUp:function (evt) { this.setLabel(this.textInputNode.value); }, setState:function (state) { this.setValue(state.value); this.setLabel(state.label); }, setAllValues:function (value1, value2) { this.setLabel(value1); this.setValue(value2); }, /** * Modification de l'initialisation: redéfinition de la création du widget * */ postCreate:function () { //on appelle la méthode de la class parent (ComboBox) this.constructor.superclass.postCreate.apply(this, arguments); //Test élémentaire: si on a une valeur à initialiser... //Ce test permet de rester compatible avec le mode de fonctionnement normal du Select if (this.initValue) { this.setAllValues(this.initText, this.initValue); } } });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <select dojoType="Select" dataUrl="diplomes.js" style="width: 300px;" name="diplcourt" id="diplcourt" initText="CAP MAINTENANCE ET HYGIENE DES LOCAUX" initValue="CAPMHL" ></select>
Dis moi ce que tu en penses et si cela répond à tes attentes.
Merci beaucoup cela marche très bien.
En fait, ce que je souhaiterai exactement c'est récupérer dans le "value" récupérer le contenu d'un champ de ma table.
Au départ j'ai un formulaire d'ajout qui insère des données dans ma table. Et la ensuite je créé une page pour éditer ma table. Mais dans ce formulaire d'édition je voudrais que mes select est pour valeur d'origine, ce qui a été entré lors de l'ajout.
Afin que l'utilisateur s'il voulait modifier une seule autre chose, n'est pas a remettre a chaque fois la valeur du diplôme ou autre qu'il ne voulait pas spécialement modifier.
Je suis désolé de vous donner tant de mal.
C'est déjà très bien ce que vous avez fait.
Encore merci.
Pour affecter le Select de ton formulaire tu peux appeler:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //Select01 est le Select dans la ligne de ta table HTML var sel1 = dojo.widget.byId("Select01") //formSelect est le Select de ton formulaire //la ligne de code: dojo.widget.byId("formSelect").setAllValues(sel1.getLabel(), sel1.getValue());
Enfin je voudrais juste faire une observation quant à ton code original.
Tu as créé une table HTML, et pour chaque ligne de cette table tu génères une balise du type
Or les données que tu charges dans ton select résident dans un fichier Javascript "diplomes.js" sur le server ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <select dojoType="Select" dataUrl="diplomes.js" style="width: 300px;" name="diplcourt" id="diplcourt" initText="<?= texte ?>" initValue="<?= valeur ?>" ></select>
Finalement, si ta table fait 100 lignes, tu vas exécuter 100 requêtes HTTP pour rapatrier 100 fois le même fichier...
Alors évidemment le server va certainement renvoyer un code HTTP 302 indiquant au navigateur qu'il peut utiliser son cache car le
fichier n'aura pas été modifié, mais il reste quand même 100 requêtes qui fondamentalement NE SERVENT A RIEN, car tes données sont statiques.
Le bon sens (en conservant ton architecture de table HTML) serait de générer les données directement DANS la page, au sein de ton Select, en utilisant
des balises option qui sont acceptées par Dojo Select (dans ce cas, il n'y a plus de dataUrl), à l'ancienne quoi !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <select dojoType="Select" style="width: 300px;" name="diplcourt" id="diplcourt" initText="<?= texte ?>" initValue="<?= valeur ?>"> <option value="BEPMPMI">BEP METIERS PRODUCTION MECANIQUE INFORMATISEE</option> <option value="CAPAPR">CAP AGENT POLYVALENT DE RESTAURATION</option> <option value="BACPROECP">BAC PROFFESSIONNEL ESTETHIQUE COSMETIQUE PARFUMERIE</option> ... </select>
Bon courage,
ERE
Partager