我有多个按钮,类为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&&tx_mydownloads_myfilelist%5Baction%5D=download&tx_mydownloads_myfilelist%5Bcontroller%5D=Download&cHash=d009eb3f9f4e1020435b96a8f7150ad5">Download</a>
编辑:我有另一个想法,也许我可以以某种方式读取目标网址,然后将新的GET参数添加到其中,然后使用window.location.replace
加载该网址?
答案 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