Search code examples
javascriptphpjqueryfluid

Inject GET parameter to target URL of a button, on click


I have multiple buttons with the class myButton. Each button has a value which is send to a server on click. The target URL of the button does look like this:

http://mysite/test/test.html?cid=15

After I click on the button, the following GET parameter should be added to the URL and then the button should be submitted:

mySessionVar=1

So the new URL should look like this:

http://mysite/test/test.html?cHash=d009eb3f9f4e1020435b96a8f7251ad5&mySessionVar=1

Why I have to inject it?

I am working with fluid. AFAIK it is not possible to manipulate fluid tags with JavaScript. However, I need to add a sessionStorage item value to the fluid tags arguments attribute.

My fluid code:

<f:link.action controller="Download" action="download" arguments="{cid: category.uid}" class="myButton">Download</f:link.action>

So my attempt is to append my sessionStorage item as GET parameter to the target URL of the button and then send it, e.g.:

$(".myButton").on
(
  "click",
  function(event)
  {
      //First prevent the default event
      event.preventDefault();

    ...inject the sessionStorage item as GET parameter to the target URL of the button, then do whatever the button would do normally...

      //Go to new URL
      window.location.replace(NEW URL);
  }
);

Is this possible?

EDIT: This is how the rendered HTML of the buttons looks like:

<a class="myButton" href="/de/mysite/test/test.html?tx_mydownloads_myfilelist%5Bcid%5D=15&amp;&amp;tx_mydownloads_myfilelist%5Baction%5D=download&amp;tx_mydownloads_myfilelist%5Bcontroller%5D=Download&amp;cHash=d009eb3f9f4e1020435b96a8f7150ad5">Download</a>

EDIT: I have another idea, maybe I could just read the target URL somehow, then add my new GET param to it and then load that URL with window.location.replace?


Solution

  • You can indeed just use the href from the button and use it to feed window.location.href, like so:

    $('.myButton').on('click', function(e) {
    
        e.preventDefault();
    
        var href = $(this).attr('href'),
            queryString = 'mySessionVar='+sessionStorage.getItem("myItem"),
            newHref;
    
        if (href.indexOf('?') !== -1) {
    
            newHref = href + '&' + queryString;
    
        } else {
    
            newHref = href + '?' + queryString;
        }
    
        window.location.href = newHref;
    });
    

    This also handles the case when there is no previous query string present on the link and appends it with ? instead of &, but that part can be omitted if that won't happen in your app.