【问题标题】:Alert after page load页面加载后提醒
【发布时间】:2020-02-16 08:37:20
【问题描述】:

这是我的脚本:

<%
    if (TempData["Resultat"] != null){
%>
<script type="text/javascript">
    alert('<%: TempData["Resultat"]%>');
</script>
<%
    }
%>

在这种情况下,弹出窗口在页面加载之前显示,但我希望在页面完全加载后出现。 在 Html 中它看起来像这样:

<body onload="happycode() ;">

但我不能在 MVC 中使用它,我的所有 Web 应用程序都有一个母版页

【问题讨论】:

    标签: javascript html asp.net-mvc


    【解决方案1】:

    共有三种方式。
    首先是把脚本标签放在页面底部:

    <body>
    <!--Body content-->
    <script type="text/javascript">
    alert('<%: TempData["Resultat"]%>');
    </script>
    </body>
    

    第二种方式是创建onload事件:

    <head>
    <script type="text/javascript">
    window.onload = function(){//window.addEventListener('load',function(){...}); (for Netscape) and window.attachEvent('onload',function(){...}); (for IE and Opera) also work
        alert('<%: TempData["Resultat"]%>');
    }
    </script>
    </head>
    

    它会在窗口加载时执行一个函数。
    最后,第三种方式是创建readystatechange事件并检查当前document.readystate:

    <head>
    <script type="text/javascript">
    document.onreadystatechange = function(){//window.addEventListener('readystatechange',function(){...}); (for Netscape) and window.attachEvent('onreadystatechange',function(){...}); (for IE and Opera) also work
        if(document.readyState=='loaded' || document.readyState=='complete')
            alert('<%: TempData["Resultat"]%>');
    }
    </script>
    </head>
    

    【讨论】:

    • 第一种方法似乎行不通。例如。我在&lt;/body&gt; 之前有一个带有脚本的页面,alert 出现在页面出现在浏览器窗口之前;事实上,直到我关闭 alert 之后,页面才会加载。
    【解决方案2】:

    如果您可以使用 jquery,那么您可以将警报放在 $(document).ready() 函数中。它看起来像这样:

    <script>
      $(document).ready(function(){
        alert('<%: TempData["Resultat"]%>');
      });
    </script>
    

    要包含 jQuery,请在代码的 &lt;head&gt; 标记中包含以下内容:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    

    这是 jsFiddle 中的一个简单示例:http://jsfiddle.net/ChaseWest/3AaAx/

    【讨论】:

    • 我的警报特殊字符中的另一个问题以 ASCI 代码显示,例如 &amp;#39 如何解码?
    • 有什么方法可以让我看到更多代码或者一个示例,我会尽力提供更多帮助。
    • 这是我的 ViewData 表单示例 L'ajout de promotion à reussi,但在警报中显示的字符串如下所示 L&amp;#39;ajout de promotion &amp;#224; reussi
    • 我确信有一个很好的方法可以做到这一点,因为这似乎是一个常见问题,但如果没有所有细节,很难真正回答。我也不是特殊字符问题的专家。不过,我会继续调查这个问题,如果我发现有任何帮助,我会告诉你。对于在附加问题上的空白,我深表歉意。稍微了解一下“String.fromCharCode()”可能会有所帮助
    • 这与您正在寻找的内容相似。我希望它有帮助!编辑:jsfiddle.net/ChaseWest/3AaAx/2 ...更新了链接以了解您的更多情况。
    【解决方案3】:

    使用jQuery处理文档就绪事件,

    <script type="text/javascript">
    
    function onLoadAlert() {
        alert('<%: TempData["Resultat"]%>');
    }
    
    $(document).ready(onLoadAlert);
    </script>
    

    或者,更简单 - 将 &lt;script&gt; 放在 body 的末尾,而不是放在 head 中。

    【讨论】:

    • (回复已删除的问题):是的,我有几个调试会话,当console.log() 和调试器给出不同的结果时
    【解决方案4】:

    为什么不能在 MVC 中使用?

    而不是使用body load方法使用jQuery并等待document onready函数完成。

    【讨论】:

    • OP 可能没有将 MVC3 用于剃须刀。
    【解决方案5】:

    解决我在最近的训练营培训中遇到的 OP 中描述的问题的另一个选项是使用 window.setTimeout 来环绕代码,这很麻烦。我的理解是,它会将函数的执行延迟指定的时间段(在本例中为 500 毫秒),从而为页面加载提供足够的时间。所以,例如:

    <script type = "text/javascript">
                window.setTimeout(function(){
                    alert("Hello World!");
                }, 500); 
    </script>
    

    【讨论】:

    【解决方案6】:

    PageLoad事件中添加以下代码:

    ScriptManager.RegisterStartupScript(Page, this.GetType(), "myScript", "alert('OK Done.');", true);
    

    【讨论】:

      【解决方案7】:
      $(window).on('load', function () {
       alert('Alert after page load');
              }
          });
      

      【讨论】:

        【解决方案8】:

        另一种选择是在脚本上使用 defer 属性,但它只适用于具有 src 属性的外部脚本:

        <script src = "exampleJsFile.js" defer> </script>
        

        【讨论】:

          猜你喜欢
          • 2021-09-06
          • 1970-01-01
          • 2015-07-21
          • 2013-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-05
          • 2017-09-24
          相关资源
          最近更新 更多