2011-06-24 6 views
1

Ce que j'essaie de faire est de remplir une seconde boîte de dépôt après une sélection dans la première liste déroulante. Je ne suis pas trop familier avec AJAX (que je crois que je devrais employer pour réaliser ceci).Passer une variable à la volée

Jusqu'à présent, j'ai le code PHP suivant.

<select name="category"> 
    <?php 
    $q = $admindb->getParentCategories(); 
    while($row=mysql_fetch_assoc($q)){ 
     $title=$row['title']; 
     $catid=$row['id']; 
     ?> 
     <option value="<?php echo $catid; ?>"<?php if($catid == $form->value("category")){ echo 'selected="selected"'; }?>><?php echo $title; ?></option> 
     <?php 
    } 
    ?> 
</select> 
<select name="subcategory"> 
    <?php 
    $q = $admindb->getSubCategories($catid); 
    while($row=mysql_fetch_assoc($q)){ 
     $title=$row['title']; 
     $catid=$row['id']; 
     ?> 
     <option value="<?php echo $catid; ?>"<?php if($catid == $form->value("subcategory")){ echo 'selected="selected"'; }?>><?php echo $title; ?></option> 
     <?php 
    } 
    ?> 
</select> 

Comme vous pouvez le voir, j'ai deux listes déroulantes.

Le problème est que la deuxième boîte a besoin de la sélection du premier à travailler. J'ai donc besoin d'implémenter un moyen de passer la sélection de la première case à la seconde case à la volée.

Quelqu'un pourrait-il offrir des pointeurs sur la façon de le faire?

Merci

+0

Ce que j'essaie de faire est seulement un petit passage de données. Je veux sélectionner la catégorie parent, puis l'ID de cette catégorie est envoyé à la requête DB pour remplir la liste déroulante de la sous-catégorie en conséquence. – sark9012

Répondre

1

Vous aurez besoin d'isoler le code pour créer le premier et le second menu déroulant en deux fichiers PHP séparés. Lorsque quelqu'un sélectionne une catégorie dans la première zone de sélection, émettez une requête Ajax dans le fichier qui génère la deuxième zone de liste. Inclure, avec la demande, la sélection dans la première case de sélection. Je recommande d'utiliser jQuery pour effectuer la requête Ajax réelle.

+0

Deux fichiers PHP séparés ne sont pas requis. Ce n'est pas non plus un appel ajax. Selon la taille des données, tout pourrait être chargé dans un seul fichier. Cela peut être fait en utilisant des tableaux js ou des objets JSON, puis chargé dynamiquement dans la seconde boîte de sélection lors du déclenchement d'événement. – SBerg413

+0

Vous pourriez le faire, mais pourquoi voudriez-vous? –

+0

Si les données sont assez simples, il est plus logique de le faire de cette façon. Ce serait finalement plus rapide avec moins de trafic réseau. Aussi, juste en soulignant les options - ajax n'est pas nécessaire. – SBerg413

1

Selon l'origine des données, vous pouvez ou non avoir besoin d'un appel ajax spécifique. MAIS vous devez attraper l'événement, puis remplir la deuxième liste déroulante en conséquence. La meilleure façon de le faire est en utilisant les événements jQuery:

http://api.jquery.com/category/events/

Il y a Tons de tutoriels pour cela aussi. Juste le google.

0

Donc, vous allez avoir HTML, et vous allez utiliser jQuery (parce qu'il est baller.)

Dans votre code HTML, vous allez avoir un <form...> avec vos deux menu déroulant des champs de formulaire . Je vais utiliser un court code pseudo-éish pour expliquer.

$('#first_dropdown').change(function(   
    // When someone makes a change to the drop down or "selects" something (maybe bind click() too) 
    // Your code here to select the value selected and do a ... 
    $.post() // post to some PHP script that will return the values that will fill the 2nd 
    // dropdown but it'll be stored in some javascript variable 
    // and you're going to add jQuery code to take that js variable to populate the 2nd dropdown 
){}); 
0

Voici une façon de le faire

  • créer le premier menu déroulant en php et faire le deuxième vide désactivé
  • à votre première liste déroulante lier une méthode JS qui est tiré onchange
  • en PHP créer un point d'entrée qui vous renvoie des données pour votre 2ème liste déroulante, AJAX va utiliser ce point d'entrée pour récupérer des données
  • Dans la méthode JS vous avez lié à votre premier dr opdown, utilisez AJAX pour récupérer les données de votre 2ème liste déroulante

Maintenant, vous pouvez utiliser jQuery, prototype, yui quel que soit le kit d'outils JS qui vous convient. Si j'étais débutant, j'invoquerais le serveur en réponse à mon appel AJAX et remplacerais ce balisage dans la liste déroulante

+0

Google est # 1, Y! utilise Bing, donc Y! n'est pas 2ème, d'ailleurs, je ne comprends pas le contexte de votre question ... pourquoi poseriez-vous ici? – Kumar

+0

ainsi que SO n'est pas une plate-forme pour partager des messages privés en l'absence de votre e-mail, je tweeté – Kumar

+0

mon compte Twitter est @eggzotic – FinalForm

Questions connexes