document.getElementById onclick仅每页加载一次

时间:2011-09-28 04:09:01

标签: javascript html javascript-events

我有一个链接:

<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获取新文本?

2 个答案:

答案 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的情况下将处理程序放在多个元素上。