<select> redirect when a item is selected

I have a <select> with some items in it. I want to reload the page with the parameter selected in the <select> box, when a item is selected.

Someone gave me this script

     <script type="text/javascript" language="Javascript">
          function reloadPage(pSelect)
          {
               if (!pSelect || pSelect.value.length == 0) return;
               
               window.location = location.pathname + '?' + pSelect.name + '=' + pSelect.value;
          }
     </script>

But there is one issue left, my page already got parameters.
http://localhost/progress/index.php?p=admin&ap=manage_crafts

This function makes it to:
http://localhost/progress/index.php?recipe_type=Alchemy
instead of:
http://localhost/progress/index.php?p=admin&ap=manage_crafts&recipe_type=Alchemy

How I can fix this ?

Also note that in the reloadPage function I I tried to change:
window.location = location.pathname + '?' + pSelect.name + '=' + pSelect.value;
with:
window.location = location.pathname + location.search +'&' + pSelect.name + '=' + pSelect.value;

After one selection my link is as I want it, but after second selection it gets:
http://localhost/progress/index.php?p=admin&ap=manage_crafts&recipe_type=Alchemy&recipe_type=Engineiring
And so on.

It adds a new &recipe_type=... instead of replacing the old one.

How I can fix this please ?
brightwoodAsked:
Who is Participating?
 
RoonaanConnect With a Mentor Commented:
Try:

var reg = new RegExp(pSelect.name + "=\\w+", "gi");
var newLocation = location.href.replace(reg,'');

                    if(newLocation.indexOf("?") > -1) {
                      newLocation += "&";
                    } else {
                      newLocation += "?";
                    }
                    newLocation += pSelect.name + "=" + pSelect.value;

-r-
0
 
RoonaanCommented:
Try:

var newLocation = location.href;
if(newLocation.indexOf("?") > -1) {
  newLocation += "&" + pSelect.name + "=" + pSelect.value;
} else {
  newLocation += "?" + pSelect.name + "=" + pSelect.value;
}
window.location = newLocation;

-r-
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
RoonaanCommented:
When pSelect's name always is recipy_type, then you can use:

var newLocation = location.href.replace(/recipy_type=\w+/g,'');

Alternatives would be to construct a RegExp object.

-r-

0
 
brightwoodAuthor Commented:
                       var newLocation = location.href;
                        if(newLocation.indexOf("recipe_type") > -1) {
                          newLocation = location.href.replace(/recipe_type=\w+/g,'');
                        } else {
                          newLocation += "&";
                        }
                        newLocation += pSelect.name + "=" + pSelect.value;

                        window.location = newLocation;

does what I need.

But is there a way to use pSelect instead of "recipe_type"
in newLocation.indexOf("recipe_type")
and
location.href.replace(/recipe_type=\w+/g,'');
0
 
brightwoodAuthor Commented:
Worked, with a little modification.
var reg = new RegExp("&" + pSelect.name + "=\\w+", "gi");
instead of
var reg = new RegExp(pSelect.name + "=\\w+", "gi");

& would get duplicated every select without this little change.

Thanks a lot, you were a great help.
0
 
brightwoodAuthor Commented:
Wops just a little question.

var reg = new RegExp("&" + pSelect.name + "=\\w+", "gi");
var newLocation = location.href.replace(reg,'');

This code replace &pSelect and everything after it with '' So if I have another variable after this it gets lost.

How can I do it to replace everthing &pSelect and everthing until another & with '' ?
0
 
RoonaanCommented:
Are you sure? If i run this script below, it works fine:

<script type="text/javascript">
pSelect = {name:"b"}
var reg = new RegExp("&" + pSelect.name + "=\\w+", "gi");
var uri = "test.php?a=1&b=2&c=3";
var newLocation = uri.replace(reg,'');
document.write(newLocation);
</script>
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.