document.getElementById onclick 每次页面加载仅工作一次

发布于 2024-12-06 21:12:15 字数 607 浏览 0 评论 0原文

我有一个链接:

<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 表单中的文本区域框中获取文本,以传递到控制器中进行输出。它在我第一次单击链接时起作用,但是如果我更改框中的文本并再次单击链接,则从第一次单击每个其他链接单击开始,它都会保持相同的值,直到我重新加载页面,无论我在中更改什么文本框。该链接返回文件下载。

如何在不重新加载页面的情况下不断从文本区域获取新文本?

I have a link:

<a id="lnk" href="${pageContext.request.contextPath}/path/path2.pdf?var0=sometext&var1=moretext" onclick="update();"target="_blank">click to export</a>

and a JavaScript function in a separate file:

function update()
{
    var link = document.getElementById("lnk");
    link.href += "&var2=" + document.getElementById("textareaIdName").value;
    return;
}

This is supposed to grab the text from a textarea box in a jsp form to pass into controller for output. It works the first time I click the link, but then if I change the text in the box and click link again it holds the same value from the first click on every other link click until I reload the page regardless of what I change in the text box. The link returns a file download.

How can I keep getting new text from textarea without reloading the page?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我偏爱纯白色 2024-12-13 21:12:15

发生这种情况是因为每次按下链接时您都使用 += ,这将继续将 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>

This occurs because you are using += each time the link is pressed which will keep concatinating the var2 onto the end of the hyperlink, to make this work you should use:

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>
甜警司 2024-12-13 21:12:15

在您的 html 中:

<a ... onclick="return update(this);">click me</a>

在处理程序中传递 this 意味着函数中的 this 引用 DOM 元素,因此您不必使用 getElementById ,所以功能是:

function update(link) {
    link.href = /* whatever */;
}

现在您可以将处理程序放在多个元素上,而无需知道或使用 id。

In your html:

<a ... onclick="return update(this);">click me</a>

Passing this in the handler means that this in the function references the DOM element, so you don't have to use getElementById, so the function is:

function update(link) {
    link.href = /* whatever */;
}

Now you can put the handler on multiple elements without knowing or using the id.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文