单击时,将GET参数注入到按钮的目标URL

时间:2016-10-24 12:27:40

标签: javascript php jquery fluid

我有多个按钮,类为myButton。每个按钮都有一个值,可以在点击时发送给服务器。按钮的目标URL如下所示:

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

点击按钮后,应将以下GET参数添加到URL中,然后提交按钮:

mySessionVar=1

所以新网址应如下所示:

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

为什么我要注射它?

我正在使用fluid。 AFAIK使用JavaScript操作流体标签是不可能的。但是,我需要将sessionStorage项值添加到流体标记arguments属性。

我的流体代码:

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

所以我的尝试是将sessionStorage项作为GET参数附加到按钮的目标URL,然后发送它,例如:

$(".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);
  }
);

这可能吗?

编辑:这是按钮的呈现HTML的样子:

<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>
编辑:我有另一个想法,也许我可以以某种方式读取目标网址,然后将新的GET参数添加到其中,然后使用window.location.replace加载该网址?

3 个答案:

答案 0 :(得分:4)

您确实可以使用按钮中的href并使用它来提供window.location.href,如下所示:

$('.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;
});

这也处理了链接上没有先前查询字符串并将其附加?而不是&的情况,但如果在您的链接中不会发生这种情况,则可以省略该部分应用

答案 1 :(得分:1)

以下代码段应足以将mySessionVar=1参数添加到href属性中:

$('.myButton').on('click', function(e) {
    $(this).attr('href', $(this).attr('href') + "&mySessionVar="+ sessionStorage.getItem('myVar');
});

您不必阻止默认值,因为您的点击处理函数在默认事件处理程序之前被调用(粗略地说:读取href属性并加载它)。

答案 2 :(得分:0)

您可以在jquery中使用 .serialize 函数,该函数既简单又现代,可以将所有选定的按钮/过滤器转换为amberson简单的url参数格式。我无法解释比Jquery网站中所说的更为清晰的内容。请参考下面的链接以找到如何使用该功能。 https://api.jquery.com/serialize/#serialize