【问题标题】:Page is still loading even after Page.LoadComplete()即使在 Page.LoadComplete() 之后页面仍在加载
【发布时间】:2016-11-21 07:11:19
【问题描述】:

我想禁用我的网页上的一些控件,而页面正在加载基于对 DropDownList 控件的更改

当用户更改 DropDownList 时,我有代码可以暂时禁用该控件。

myDDL.enabled =false;

我的Page_Load() 也有一个调用来创建LoadComplete 事件。

Page.LoadComplete += new EventHandler(Page_LoadComplete);

LoadComplete() 中,我只需重新启用DropDownList 控件

myDDL.enabled=true;

然而,真正发生的是我的控件“非常快速”启用,即使页面仍在“加载”,用户仍然可以更改dropdownlist, 的值。

“加载”是什么意思?

我有一个gridviewCKeditor 文本框在几行上,我可以看到gridview 已加载,但CKeditor 控件在它停止之前仍在呈现,因为它在内部做了什么( javascript) 加载。

有没有办法可以将LoadComplete() 事件延迟 5 秒,以允许 CKeditor 中的 javascript 完成?

谢谢

【问题讨论】:

    标签: javascript asp.net gridview ckeditor delay


    【解决方案1】:

    如果您只想延迟 5 节,您可以这样做:

    函数加载完成() {

     setTimeout(function(){ myDDL.enable = true;}, 5000);
    

    }

    这将导致调用 loadComplete 5 秒后启用 ddl。

    所以我实际上是在服务器上做的:

     private void load_page (){
         myDD.enable = false;
    }
    

    然后在客户端,使用 jquery:

    <script>
        $(document).ready(function() { $("#myDDL").prop('disabled', false); });
    
    </script>
    

    如果没有 jquery,您将使用 onload 事件处理程序作为表单的一部分。

    这个解决方案是严格的客户端,但假定一个 aspx 页面。在标记中分配了 onload 事件处理程序。

    <html>
    <head>
        <script>
            function init() {
                document.getElementById("someDDL").disabled = false;
    
            }
    
        </script>
    </head>
    <body>
        <form onload="init()">
            <asp:DropDownList id="someDDL" clientIdMode="Static" runat="server" Enabled="false"></asp:DropDownList>
        </form>
    </body>
    </html>
    

    【讨论】:

    • 但那是javascript。请问您有 C# 解决方案吗?
    • 没有。您希望在加载页面之前禁用 ddl。您需要在客户端(因此是 javascript)而不是服务器上执行此操作。
    • 谢谢。好的,我已经这样做了,但是 ddl 一开始总是假的!我希望它被启用,所以用户可以选择一些东西,但是当他们选择一个值时,禁用它。然后触发更改事件,加载gridview,CKeditor等......然后在页面上加载所有对象(包括CKeditor等)后再次重新启用ddl。
    • 还有,什么叫 loadComplete()?
    【解决方案2】:

    我通过简单地使用 Javascript 和 ...

    解决了 delim
    window.onload = function () {
        setTimeout(function() { 
            var ddl = document.getElementById('<%=myDDL.ClientID%>');
            if (ddl) ddl.removeAttribute('disabled');
        }, 4500)
    }
    

    这将下拉列表控件的重新启用延迟了 4.5 秒,并且在所有 javascript 和其他控件都已加载之后。

    我知道 onLoad() 会在 DOM 加载后立即运行,但由于延迟,控件仅在我需要时才重新启用。

    效果很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多