2010-05-10 91 views
0

我在ASP中創建了一個用於與Telligent CommunityServer集成的Web控件。該控件是用ASP編寫的,有10行C#後端用於控制基於權限的UI元素的可見性,但是我認爲90%的功能是直接使用Javascript。具有多個Javascript實例的頁面上的多個控件

該控件的工作原理非常漂亮,直到您在同一頁面上放置兩個控件實例 - 因爲它們引用完全相同的Javascript函數,所以只有一個控件可以工作。

我該如何利用這個功能,這1200行的Javascript,並使得控件的每個實例都可以引用其每個唯一的Javascript實例?

+0

我們需要看一些示例代碼,因爲按照書面的問題沒有多大意義。 – Pointy 2010-05-10 23:22:18

+0

那麼,有太多的代碼樣本...我創建了一個包含Javascript的ASCX Web控件。當我將這兩個ASCX文件放在ASPX頁面上時,會出現重複的Javascript。例如,它們都引用Javascript Load()函數,但Load()函數不知道要加載哪個Control。合理? – 2010-05-10 23:26:33

+0

這是TC5 +的組件還是僅僅是另一個版本的Telligent的控件? – 2010-05-11 11:51:54

回答

1

如果問題只是找出哪個HTML元素觸發了一個事件,那麼這很容易 - 它傳遞給你的事件參數。 (當然,你可以獲得它的父元素。)所以如果我正確地理解了這個問題,你有JavaScript函數引用一些控件,它們會被重複?

我不認爲這裏有什麼神奇的解決方案:你只需要使ID是唯一的。如果你沒有使用服務器端控件(它會自動處理這個),那麼你可以使用一些服務器端生成的前綴或後綴,例如。

<input id="<%= ParentControlId %>_mytextbox" type="text" /> 

其中ParentControlId是父控件的唯一ID(你可以只使用Control.ID如果你不介意長時間的ID)。

當然,您應該嘗試重新使用JavaScript函數,而不是爲每個控件實例重複使用它們。如果您使用服務器生成的ID方法,則必須傳遞完整的ID。如果您使用前綴方法,則可以傳遞前綴。

0

您的控件如何將JavaScript引入頁面?直接注入?你在使用ScriptReference嗎?如果兩個控件引用相同的JS(相同的URL),那麼瀏覽器將只加載一次JS。

另外,你的JS寫的任何舊實例?例如你有像Load(oControlName)這樣的函數,或者Load()函數裏面是否有一個硬編碼的實例名?

IMO試圖獲得多個'JavaScript'並不是前進之路 - 重構代碼可能會讓您的答案更快。

相關問題