2010-02-11 4 views
1
<form method="get" action=""> 
    <select name="name" onchange='this.form.submit()'> 
     <option value="a">a</option> 
     <option value="b">b</option> 
    </select> 
    <select name="location" onchange='this.form.submit()'> 
     <option value="x">x</option> 
     <option value="y">y</option> 
    </select> 
</form> 

Je sélectionner l'option « a » et il fonctionne très bien, mais si je choisis « x », « une » valeur disparaît de l'URL, comment puis-je conserver toutes les valeurs?valeurs de retenue dans une requête GET

Edition: Lors de la soumission du formulaire, comment puis-je m'assurer que les valeurs sélectionnées restent également sélectionnées dans les menus de sélection?

Merci

+0

Pourquoi exactement avez-vous besoin 'selfURL()' lorsqu'un formulaire est soumis à lui-même par défaut (lorsque vous quittez la 'action' attribut vide, ou l'enlever complètement)? – mercator

+0

Ah, je ne le savais pas! : P Merci! – 3zzy

Répondre

5

envoi d'un formulaire charge la page cible dans la fenêtre (dans ce cas, la page cible est la même page que vous êtes). Je recommande fortement pas en soumettant le formulaire lorsque l'utilisateur sélectionne un élément d'une liste; ce n'est pas ce que l'utilisateur va s'attendre à avoir. Mais si vous l'avez fait, vous devez garder une trace des champs que l'utilisateur a choisis "jusqu'ici" côté serveur, puis définir l'attribut selected approprié sur la balise option pour la valeur qu'ils avaient précédemment sélectionné, par exemple lors de la génération du formulaire:

<option value='a' selected>a</option> 

Mais encore une fois, mieux les laisser faire leurs choix et ensuite soumettre le formulaire avec une sorte de bouton. Si vous souhaitez modifier le contenu des listes en fonction des éléments qu'ils ont choisis jusqu'à présent, vous pouvez utiliser le JavaScript côté client (éventuellement associé à une requête Ajax sur le serveur) pour y parvenir.

0

Voici une mise à jour rapide de votre fonction selfURL() qui devrait vous aider à résoudre votre problème.

function selfURL() 
{ 
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); 
    $uri = $_SERVER['REQUEST_URI']; 
    $querystring = empty($_SERVER['QUERY_STRING']) ? '' : '?'.$_SERVER['QUERY_STRING']; 
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'].$url.$querystring; 
} 
0

Modifier la balise form à:

<form method="get" action="<?= _SERVER["REQUEST_URI"] ?>"> 
Questions connexes