代码之家  ›  专栏  ›  技术社区  ›  ziggy

使用Jquery显示模式“please wait”对话框消息

  •  3
  • ziggy  · 技术社区  · 14 年前

    当用户单击某个链接时是否可以阻止某个页面,并且只在服务器返回响应后才启用它。 我最近遇到了一个问题,一个链接被点击了好几次,导致了两个同时的改变。

    问题是页面允许多次提交。我已经在服务器端使用Struts saveToken()和isValidToken()解决了这个问题,以防止这种情况再次发生。这将确保如果收到多个提交,则不会处理第二个提交。

    现在我遇到的问题是,如果用户两次单击提交链接,第一个请求是有效的,但第二个不是。用户被重定向到错误页,但没有意识到第一个请求已经通过。

    我认为解决方法是在单击链接时阻止/禁用它。我知道您可以使用javascript来禁用链接,但我想使用我在几个站点上看到的AJAXy模式对话框之一。基本上,当你点击链接时,会出现一个弹出对话框,显示一条消息“请稍候…”。后台淡出,用户在服务器返回响应之前无法执行任何操作。我看到的大多数示例似乎都是基于Ajax的。我的页面不使用Ajax。

    实现此模式对话框的最简单方法是什么?我一直在四处寻找,有几个插件可用于JQuery,但考虑到我是新手,我不太了解它。有人能给我举个使用Jquery的例子吗?

    谢谢

    编辑

    以这个为例,

                //CONTROLLING EVENTS IN jQuery
                $(document).ready(function(){
    
                    //LOADING POPUP
                    //Click the button event!
                    $("#button").click(function(){
                        //centering with css
                        centerPopup();
                        //load popup
                        loadPopup();
                    });
    
                    //CLOSING POPUP
                    //Click the x event!
                    $("#popupContactClose").click(function(){
                        disablePopup();
                    });
                    //Click out event!
                    $("#backgroundPopup").click(function(){
                        disablePopup();
                    });
                    //Press Escape event!
                    $(document).keypress(function(e){
                        if(e.keyCode==27 && popupStatus==1){
                            disablePopup();
                        }
                    });
    
                });
    

    我希望在单击链接时触发这些事件。链接本身指向另一个javascript函数。即

    <a href="javascript:submitform();">confirm</a>
    

    3 回复  |  直到 14 年前
        1
  •  7
  •   Sam    14 年前

    看看jQuery.dialog( website ),它允许您在页面div中显示为modals,或者甚至可以从另一个页面获取内容。

    <div id="progress" class="dialogContent" style="text-align: left; display: none;">
    <img src="../../global/style/default/images/ajax-loader.gif" style="margin-right: 5px;" />
    <asp:literal id="literalPleaseWait" runat="server" text="Please wait..." />
    </div>
    

    然后调用下面的函数来显示对话框

     function ShowProgressAnimation() {
        var pleaseWaitDialog = $("#progress").dialog(
        {
        resizable: false,
        height: 'auto',
        width: 150,
        modal: true,
        closeText: '',
        bgiframe: true,
        closeOnEscape: false,
        open: function(type, data) {
        $(this).parent().appendTo($("form:first"));
        $('body').css('overflow', 'auto'); //IE scrollbar fix for long checklist templates
        }
        });
        }
    
        2
  •  1
  •   David Mårtensson    14 年前

    然后在另一个div上显示一条消息。

    有几个js库可以做这些事情,其中很多都是基于jQuery,所以请看jQuery model popup。

        3
  •  1
  •   Suhumar    14 年前