2011-05-11 69 views
1

我已經開發了一個jQuery腳本,每次<select>選擇被改變,然後執行一些邏輯。避免MasterPage和Iframe子頁面中的腳本執行兩次

起初我添加了腳本的MasterPage,以確保每一個頁面會被認爲是 - 不過,我有一些外部網頁(aspx)不使用MasterPage和作爲結果,沒有劇本。

爲了解決這個問題,我將相同的腳本添加到自定義控件中,該控件呈現爲<select>,並且也存在於這些外部頁面中。不幸的是,這種腳本被執行了兩次,而不是一次。

如何更改我的代碼以確保腳本將在每個頁面中執行,但只是一次?

回答

1

用戶.net的ClientScriptManager.RegisterClientScriptInclude,它有一個關鍵參數,所以它只會註冊每個鍵一次。在您的母版頁和用戶控件中,請確保您使用相同的密鑰註冊它們。

你也可以使用jQuery,看它是否已註冊,並添加ID:

function requireOnce(url) {  
    if (!$("script[scr='" + url + "']").length) { 
     $('head').append("<script type='text/javascript' src='" + url + "'></script>"); 
    } 
} 

上面如果您使用的是封裝控制,其中包括腳本,然後取出從here

+0

問題是MasterPage來自傳統工具,因此我無法編輯它的代碼隱藏,但只能編輯MasterPage.master文件。因此,我插入母版頁:<%if(Page.ClientScript.IsStartupScriptRegistered(「myScriptID」)== false){%> $(document).ready(function(){//這裏是腳本} <%} %>而在自定義控件相同,對腳本鍵使用相同的ID我不使用ClientScriptManager,因爲我沒有使用UpdatePanel,但即使使用此解決方案,它也不起作用,腳本會執行兩次。 – Francesco 2011-05-11 14:22:00

+0

如果我想要包括jQuery? – Zirak 2011-05-11 14:52:31

+0

如果jquery是有問題的包含文件,那麼您可能需要在您的用戶控件背後的代碼中檢查,以查看它是否已包含。 – derek 2011-05-11 14:58:02

0

採取來自Master的原始腳本並在這兩個頁面中使用所述控件。除非我錯過了什麼,這是說:

  • MasterPage
  • 使用自定義的控制與腳本MasterPage
  • 使用自定義的控制與腳本非掌握網頁中刪除原來的腳本。
-1

我不想讓asp.net處理我的JavaScript,所以我創建了一個全局變量isPostBack,並且默認將它設置爲false。當頁面做回發時,我在頁面上添加了window.isPostBack = true;。現在你的javascript只需要檢查全局變量(if(window.isPostBack){...})。

+0

注意詳細說明-1? – jerone 2011-05-11 14:34:14