當我使用"#<%= txtNumberOfDrugsInKit.ClientID %>"
時,我可以從我的JQuery腳本訪問服務器控件;但是當我把它放在外部腳本文件中時,它不起作用。如何從我的外部JavaScript文件訪問服務器控件?
如何從我的外部JavaScript文件訪問一個asp文本框?我不相信這是行不通的。
當我使用"#<%= txtNumberOfDrugsInKit.ClientID %>"
時,我可以從我的JQuery腳本訪問服務器控件;但是當我把它放在外部腳本文件中時,它不起作用。如何從我的外部JavaScript文件訪問服務器控件?
如何從我的外部JavaScript文件訪問一個asp文本框?我不相信這是行不通的。
我認爲文章會幫助你。 http://lanitdev.wordpress.com/2009/06/08/extending-jquery-to-select-asp-controls/ +
我已經使用了這個解決方案,它可以很好地選擇服務器控件而不必添加額外的標記。
我認爲#<%= txtNumberOfDrugsInKit.ClientID %>
得到評估服務器端,所以當然它不工作在外部js,因爲這些服務器靜態,而不是在服務器端處理。
我想你並沒有完全意識到服務器上運行的代碼以及客戶端上運行的是什麼。將數據傳遞到外部腳本的一種方法是將其放入隱藏的輸入或隱藏的div中,然後從外部腳本中讀取該DOM元素。
「#<%= txtNumberOfDrugsInKit.ClientID%>」最有可能不會在外部JS文件中執行,因爲它不是ASP.NET頁面的一部分 您必須「硬編碼」該ID。
但是,如果你有「怪異」的ID的問題,ASP.NET產生,那麼你可以把ClientID的一個隱藏字段,在外部JS文件進行閱讀
爲什麼-1?我的回答沒有錯...... – 2009-12-07 16:32:37
感謝您的回覆。 – Tebo 2009-12-07 16:47:42
我在做什麼過去解決這個問題的方法是使用CSS名稱。在您txtNumberOfDrugsInKit控制,你可以做類似下面的...
<asp:TextBox ID="txtNumberOfDrugsInKit" CssClass="txtNumberOfDrugsInKit" ... />
,然後在jQuery的,而不是引用它作爲$("#<%= txtNumberOfDrugsInKit.ClientID %>")
,您可以通過類名稱引用它來代替。在那種情況下,你只需要做$(".txtNumberOfDrugsInKit")
。只要你保持這些選擇器在你的頁面上獨一無二 - 用它來拾取一個控件就完全沒有問題。
請注意,通過類名選擇元素比ID更慢。看到這個:http://www.componenthouse.com/article-19 – 2009-12-07 16:44:02
到目前爲止,我從來沒有一個地方,它是永遠不會明顯的。對於這樣的事情 - 先編碼,稍後優化 - 然後只優化需要它的東西。 jQuery選擇器從來沒有出現在我需要優化的東西列表中。 – 2009-12-07 17:02:45
我要做的就是把腳本我的主頁上(而不是在外部文件)只包括一個對象的定義是這樣的:
var Controls = {
'Name':<%="'" + txtNumberOfDrugsInKit.ClientID%>',
'OtherName':<%="'" + otherControl.ClientID%>'
};
這裏的技巧是,你必須把這個或者你不能從外部文件使用它,所以你必須添加runat="server"
到你的頭元素聲明。這也解釋了爲什麼我使用對象而不是簡單的變量名稱;它最大限度地減少了其他地方命名衝突的機會(我只有「控制」名稱擔心)。
然後我就可以使用控制對象在這樣一個外部腳本:
var OtherElement = document.getElementById(Controls.OtherName);
或
var jQueryObj = $('#' + Controls.OtherName);
在這裏看到另外一個例子:
Can I count on ctl00_PagePlaceHolder_myId staying the same?
請訪問http://計算器.com/questions/844970/is-there-a-better-way-to-get-clientids-into-external-js-files and http:// stackoverflow。com/questions/1232465/how-to-use-jquery-select-element-by-id-and-asp-net-without-put-ctl00-everyw/1232498#1232498對於一些通用解決方案。有關jQuery解決方案,請參閱http://stackoverflow.com/questions/497802/how-to-stop-asp-net-from-changing-ids-in-order-to-use-jquery/497872#497872。 – 2009-12-07 16:33:47