Symfony 1.4: Comment récupérer la valeur sélectionnée avec la fonction d’AJAX dans select depend?

Dans ma firebase database, j’ai deux champs liés. Le deuxième champ dépend de la valeur sélectionnée dans le premier. Les relations sont:

entrez la description de l'image ici

La fonction que j’utilise sous la forme de la table “conflictos_1” est:

  $(document).ready(function() { $("#conflictos1_id_sector_actividad").change(function() { var id_sub = $(this).val(); if(id_sub != '') { $.ajax ({ type: "POST", url: ''+ '?id=' + id_sub, cache: false, data: "id_sub="+ id_sub, success: function(data) { $("#conflictos1_id_subsector_actividad").html(data); // but it does not select the value of dropdown list. } }); } else { $("#conflictos1_id_subsector_actividad").html("-- No se ha seleccionado subsector --"); } return false; }); });  

Quand j’ajoute un nouvel enregistrement, tout fonctionne bien. Mais lorsque je modifie un enregistrement, la personne à charge sélectionnée n’affiche pas la valeur “sélectionnée”. En mode édition, lorsque je regarde le champ “id_subsector_actividad”, la valeur sélectionnée doit être, par exemple, : Voici ce que je vois sur mon formulaire lorsque j’inspecte l’élément créé avec la fonction AJAX:

  14.1 Meresortingces Preparación de alimentos y comedor Seguridad redes sanitarias  

C’est ce que je veux voir:

  14.1 Meresortingces Preparación de alimentos y comedor Seguridad redes sanitarias  

J’utilise cette fonction pour filtrer les enregistrements de la table “Subsector_actividad_ta8” (je travaille avec Symfony 1.4 et Docsortingne):

  public function executeSubsector() { $id_sub = $_POST['id_sub']; $this->subsec= Docsortingne_Core::getTable('SubsectorActividadTa8') ->createQuery('a') ->where('a.id_sector = ?', $id_sub) ->execute(); } 

Ma question est la suivante: que dois-je changer dans la fonction AJAX pour afficher la valeur “sélectionnée” dans le deuxième champ lorsque je modifie un enregistrement existant?

Peut-être avec quelque chose comme:

 $("option[value='37']").attr('selected', 'selected'); 

Vous avez une question similaire sur: Définir l’option sélectionnée de la zone de sélection

Voici la solution que j’ai rencontrée: j’ai séparé le problème en deux.

Cas 1: Nouveau record

J’utilise la même fonction JQuery illustrée ci-dessus dans la question. Avec la fonction associée, également illustrée ci-dessus. Cette affaire ne faisait pas partie de mon problème

Cas 2: Éditer un enregistrement existant (voici mon problème)

J’ai ajouté pour 'id_subsector_actividad' dans le widget la propriété 'table_method'=>'Subsector' associé à la fonction public function Subsector() (voir le code ci-dessous).

Dans le _form.php partiel de conflictos1, j’ai écrit le code suivant pour le champ id_subsector_actividad :

 getObject()->isNew()): ?>   getObject()->isNew()): ?>  

Dans le fichier action.class.php du conflit 1, j’ai modifié la fonction executeEdit, avec l’ajout de la variable $elsector :

 public function executeEdit(sfWebRequest $request) { global $elsector; $this->forward404Unless($conflictos1 = Docsortingne_Core::getTable('Conflictos1')->find(array($request->getParameter('id'))), sprintf('Object conflictos1 does not exist (%s).', $request->getParameter('id'))); $elsector= $conflictos1->getIdSectorActividad(); $this->form = new Conflictos1Form($conflictos1); } 

J’utilise $elsector dans la fonction suivante créée dans SubsectorActividadTa8Table.class.php

 public function Subsector() { global $elsector; if (!is_null($elsector)){ $id_sub=$elsector; $query= Docsortingne_Query::create() ->select('a.id') ->from('SubsectorActividadTa8 a') ->innerJoin('a.Conflictos1 c') ->where('a.id_sector = ?', $id_sub); return $query->execute(); } } 

Ainsi, Symfony affiche sur le formulaire, la valeur du champ nommé IdSubsectorActividad, non précédemment exposé.

En d’autres termes, maintenant, lorsque je modifie un enregistrement dans la table conflictos1 le champ nommé IdSubsectorActividad indique la valeur correcte, alors qu’avant le formulaire n’indiquait aucune valeur.

Maintenant tout fonctionne bien!