避免Master Page和Iframe子页面中的脚本执行两次

时间:2011-05-11 14:06:08

标签: javascript jquery asp.net master-pages

我用jQuery开发了一个脚本,每次更改<select>选项时都会执行一些逻辑。

最初我将该脚本添加到MasterPage,以确保每个页面都被考虑 - 但是,我有一些外部页面(aspx)不使用{{1因此,没有脚本。

为了解决这个问题,我将相同的脚本添加到自定义控件中,该控件呈现为MasterPage并且也存在于这些外部页面中。不幸的是,通过这种方式,脚本执行两次,而不是仅执行一次。

如何更改我的代码以确保脚本将在每个页面中执行,但只需执行一次?

3 个答案:

答案 0 :(得分:1)

用户.net的ClientScriptManager.RegisterClientScriptInclude,它有一个关键参数,因此它只会注册每个键一次。在您的母版页和用户控件中,只需确保使用相同的密钥注册它们。

你也可以使用jquery来查看它是否已经注册并添加id:

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

以上摘自here

答案 1 :(得分:0)

如果您正在使用包含脚本的封装控件,则从Master中删除原始脚本,并在两个页面中使用所述控件。除非我错过了什么,这就是说:

  • MasterPage
  • 删除原始脚本
  • MasterPage
  • 中使用自定义控件和脚本
  • 在非主页中使用自定义控件和脚本。

答案 2 :(得分:-1)

我不希望asp.net处理我的JavaScript,因此我创建了一个全局变量isPostBack并默认将其设置为false。当页面进行回发时,我将window.isPostBack = true;添加到页面中。现在你的javascript只需检查全局变量(if(window.isPostBack){...})。