2011-09-28 32 views
1

我有一個鏈接:的document.getElementById的onclick只有每個頁面加載工作一旦

<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; 
} 

這應該抓住從文本textarea框以jsp形式傳入控制器進行輸出。這是我第一次點擊鏈接,但如果我改變框中的文本,然後再次點擊鏈接,它會保持相同的值,從第一次點擊每隔一個鏈接點擊,直到我重新加載頁面,無論我改變了什麼文本框。該鏈接返回文件下載。

我怎樣才能從textarea中獲取新文本而無需重新加載頁面?

回答

4

這是因爲你使用+ =每一個環節被按下時,將保持concatinating的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

但是鏈接的動作被調用(沒有'return false')。不應該將窗口位置更新爲鏈接的URL嗎? – BalusC

+0

如果你'CTRL +點擊'或類似的,頁面將保持,如果這是你的意思? – Serdalis

+0

好點和Ctrl +點擊。 – BalusC

2

在您的HTML:

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

在處理程序傳遞意味着在函數引用的DOM元素,所以你不必使用的getElementById,這樣的功能是:

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

現在,你可以把多個元素的處理程序不知道或使用該ID。

相關問題