J'ai une liste déroulante sélectionnée avec ID mappée sur les valeurs. Sur l'événement OnChange, je veux rediriger vers la même URL, mais avec "id = valeur" annexée au QueryString.
Comment puis-je vérifier que cette option "ID" n'est pas déjà dans le querystring (je ne veux pas Valeurs multiples) et remplacer / ajouter si nécessaire. p>
Comment puis-je vérifier si "?" est déjà dans le querystring et ajoute à l'URL si ce n'est pas. P>
Y a-t-il un moyen facile avec JQuery de faire cela? P>
Il doit faire quelque chose de similaire sous le capot pour Merci d'avance. Remarque: cette page peut ne pas avoir que quelques options de requête différentes transmises (qui définissent les valeurs par défaut sur d'autres options de formulaire), le remplacement de l'ensemble de la requête globale n'est pas une option. P> $ (). Ajax (URL, {Options}) CODE> Appels.
J'espérais que je pouvais juste faire
$ (). Redirection (URL, {id: $ (ceci) .val ()}) code> ou somesuch. P>
<html>
<head><script type="text/javascript" src="/jquery-1.3.2.min.js"></script></head>
<body>
<script>
$(function(){
$('#selector').change(function(){
// problem if 'id' option already exists
var url = location.href + '?;id=' + $(this).val();
location.assign( url );
});
});
</script>
<a href="#" onclick="location.assign( location.pathname )">reset</a>
<form>
<select id='selector' name='id'>
<option value='1'>one</option>
<option value='2'>two</option>
<option value='3'>three</option>
</select>
</form>
</body>
</html>
6 Réponses :
Essayez d'utiliser la fonction Split:
var url = location.href.split('?')[0] + '?;id=' + $(this).val();
Cela fonctionne comme un charme:
paramètre fenêtre.location.search code> mettra à jour la chaîne de requête de l'URL (et écrasera une valeur s'il est déjà sorti)
$('#selector').change(function(){
window.location.search = "id=" + $(this).val();
});
Quel navigateur? Quel est votre HTML et JS?
Désolé, je me suis trompé .Search code> pour un paramètre "Recherche" QueryString. Vraiment
recherche code> signifie l'ensemble de la requête dans l'objet de localisation de DOM.
J'ai fini par aller avec une correspondance Regexp pour remplacer les options. jquery.param prend un hash et la sérialise à une query_string mais cela ne fournit pas l'inverse (briser une query_string).
$('#selector').change(function(){ $.redirect( location.href, { id : $(this).val() }) })
Je soupçonne que la solution alléguée ne fonctionne pas avec des noms de variables spécifiques. Surtout la ligne: Si la clé est une séquence de caractères présentée ailleurs dans le querystring, cette occurrence sera remplacée par erreur (essayez une lettre, par exemple 'a'). En effet, la regex quitte les limites de la chaîne ouvertes (leaders ';' et la trailing '=' sont à la fois facultatives). Peut-être que l'épendresse est mieux comme: p> si je ne l'ai pas encore testé. P> p>
Joli bogue trouver! Vient de vérifier mon code et je passe dans client_id = 12; projet_id = 45; Code> etc. Mais je vois à quel point il serait facile de casser avec juste
id = code> Je pense que je vais aller avec quelque chose comme
Regexp ('[; &]? \ B' .. .) code> va tester quand je vais travailler. Merci.
Basé sur la réponse de CoffEemonster:
Il y a un problème lorsque l'emplacement.href contient une partie de hachage: corrigé en supprimant la partie de hachage de l'URL: maintenant
www.example.com # hachage code> devient
www.example.com # hash? id = quel que soit code> ce qui donne dans
? id = quelconque code> ne pas être interprété Par le serveur. p>
url.split ("#") [0]; code>
p > www.example.com # hachage code> devient
www.example.com?id=whatever code> p> p> p>
Maintenant, pour des points bonus, réattachez le hachage à la fin de l'URL. :-)
Dupliqué possible de Encodage de QueryString d'un objet JavaScript