我有一个链接:
<a id="lnk" href="${pageContext.request.contextPath}/path/path2.pdf?var0=sometext&var1=moretext" onclick="update();"target="_blank">click to export</a>
和单独文件中的JavaScript函数:
function update()
{
var link = document.getElementById("lnk");
link.href += "&var2=" + document.getElementById("textareaIdName").value;
return;
}
这应该从jsp表单中的textarea框中获取文本以传递到控制器以进行输出。它在我第一次单击链接时工作,但是如果我更改框中的文本并再次单击链接,它将保持相同的值,从第一次单击每个其他链接单击,直到我重新加载页面,无论我在哪里更改文本框。该链接返回文件下载。
如何在不重新加载页面的情况下继续从textarea获取新文本?
答案 0 :(得分:4)
发生这种情况是因为每次按下链接时都使用+ =,这会将var2连接到超链接的末尾,以使你应该使用这项工作:
var linkName = "${pageContext.request.contextPath}/path/path2.pdf?var0=sometext&var1=moretext";
function update(obj) {
obj.href = linkName + "&var2=" + document.getElementById("textareaIdName").value;
return;
}
<a id="lnk" href="" onclick="update(this);" target="_blank">click to export</a>
答案 1 :(得分:2)
在你的HTML中:
<a ... onclick="return update(this);">click me</a>
在处理程序中传递 this 意味着函数中的 this 引用了DOM元素,因此您不必使用 getElementById ,所以功能是:
function update(link) {
link.href = /* whatever */;
}
现在,您可以在不知道或不使用id的情况下将处理程序放在多个元素上。