避免母版页和 Iframe 子页中的脚本执行两次

Avoid that script in MasterPage and in Iframe child page is executed twice

本文关键字:执行 脚本 两次 母版页 Iframe      更新时间:2023-09-26

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

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

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

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

用户.

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

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

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

以上是从这里拍摄的

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

  • MasterPage中删除原始脚本
  • MasterPage中将自定义控件与脚本配合使用
  • 在非主控页面中将自定义控件与脚本一起使用。

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