2010-09-17 60 views
0

看着許多論壇,這似乎是解決辦法,但是,它似乎並沒有爲我工作:如何獲得一個asp.net 3.5文本框輸入到JavaScript中?

function update() { 

    alert("hello world"); 

    var test = document.getElementById("<%=InCL.ClientID%>").value;  

    alert(test); 

} 

和ASP/HTML是:

<asp:TextBox ID="InCL" runat="server" Text="" value="" onchange="update()"></asp:TextBox> 

似乎我失蹤簡單的事情?我使用單引號也試圖與<%= InCL.ClientID%>

警報 「Hello World」 的彈出式上的改變,而不是測試...

使用asp.net 3.5,FF,母版頁等...

謝謝。

編輯
所以我改成了使用THIS.VALUE和這樣的作品,但仍對如何通過ID得到它沒有解決辦法?

作品:

<asp:TextBox ID="InCL" runat="server" Text="" value="1" onchange="update(this.value)"></asp:TextBox> 

有:

function update(x) { 

    alert(x); 


} 
+1

你的JavaScript位於何處?在aspx頁面? – 2010-09-17 23:25:58

+2

你可以從你的瀏覽器「查看源代碼」,並確認'document.getElementById()'中的'id'與文本框的'id'匹配嗎? – 2010-09-17 23:26:37

+0

@Russ Cam:它在一個外部的.js中 - 添加在母版頁中 - ,並且可以用作hello世界的彈出窗口。 – 2010-09-17 23:35:34

回答

3

這是不工作的原因是,JavaScript是在不通過處理管線去是靜態地提供一個外部JS文件從磁盤。服務器端標記<%= InCL.ClientID%>需要通過處理管道渲染服務器控件的id字符串。

解決此問題的最簡單方法是將腳本元素放入頁面中。其他方法是隻定義頁面中具有服務器標籤並分配給全局變量的JavaScript。然後在全局變量聲明和賦值之後定義你的外部腳本 - 然後你可以在外部腳本文件中使用這個變量。

+0

好吧,這是有道理的,我會聽你的話......謝謝。然而,我不相信沒有辦法將管道連接到外部文件......瘋狂。 – 2010-09-17 23:54:06

+1

當時,我太慢了。 =)+1 – RPM1984 2010-09-17 23:55:12

+0

@ RPM1984:如果你回答,我仍會給你+1 ...哈哈沒有。 – 2010-09-17 23:56:08

1

你的問題是你的JavaScript文件是外部的,所以它沒有可見性或對當前HTML頁面和服務器之間的連線感。

這可能是你最好的選擇

聲明頁面上的文本控件:

<asp:Literal id="variables" runat="server" /> 

它設置成客戶端ID:

variables.Text = string.Format("var myclientid='{0}';", Incl.ClientID); 

然後,你可以從訪問您的外部JS文件:

document.getElementById(myclientid); 

HTH

+0

偉大的洞察力和其他信息,非常感謝。 – 2010-09-17 23:59:55

1

爲什麼不簡單地通過「this」而不是「this.value」? (很明顯,實際代碼中沒有引號。)如果你傳遞了實際的字段對象,你可以派生出ID,值,掛在舊DOM鄰域周圍的父母,祖父母或兄弟姐妹 - 並且你有一個可重用的塊的代碼,可以在任何地方丟棄,而不必硬編碼一個id值。 (即使代碼僅用於這一表格,當您決定徹底改變表格時會發生什麼?)

+0

好點,謝謝。 – 2010-09-18 02:11:09

相關問題