即使在Page.LoadComplete()之后页面仍在加载

时间:2016-11-21 07:11:19

标签: javascript asp.net gridview ckeditor delay

我想在我的网页上禁用某些控件,而页面是根据对DropDownList控件的更改

加载的

当用户更改DropDownList时,我在那里有代码暂时禁用控件。

myDDL.enabled =false;

我也在Page_Load()打电话来创建LoadComplete事件。

Page.LoadComplete += new EventHandler(Page_LoadComplete);

LoadComplete()我只是重新启用DropDownList控件

myDDL.enabled=true;

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

“加载”是什么意思?

我有gridview个行CKeditor个文本框,我可以看到gridview已加载,但CKeditor控件在停止之前仍然呈现,由于它正在内部(javascript)加载。

有没有办法让LoadComplete()事件延迟5秒,让CKeditor中的javascript完成?

由于

2 个答案:

答案 0 :(得分:1)

如果你想要的只是5节延迟,你可以这样做:

function loadComplete(){

 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>

答案 1 :(得分:0)

我只使用Javascript和...

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

这会延迟下拉列表控件重新启用4.5秒,并且已加载所有javascript和其他控件。

我知道onLoad()在加载DOM后立即运行,但是只有在我想要的时候才会重新启用控件。

效果很好!