【问题标题】:jquery implementation of Please Wait dialog - safari specific issue请等待对话框的 jquery 实现 - Safari 特定问题
【发布时间】:2012-01-18 14:48:48
【问题描述】:

我的目标是显示一个非模态 jquery-ui 对话框,该对话框将显示请等待消息以及加载动画。此对话框将显示在用户来自的页面上,而不是继续。我在很大程度上已经使用下面的代码进行了这项工作。但是,Safari 不会显示请稍候对话框。 Firefox 和 Chrome 显示对话框和以下 href。 Safari 只是跟随 href,但不会显示对话框。

如果我尝试使用 preventDefault();或返回 false;在 click 事件处理程序中,safari(和所有浏览器)将显示请等待对话框,但当然它不会遵循 href。因此,我确实想要转到单击的 href 的默认行为,就在转到 href 时,我希望显示对话框。

我什至尝试做一个点击处理程序并在里面做一个 preventDefault(),然后打开对话框然后设置 window.location 或 location.href,但 Safari 仍然会跟随 href 而不会显示对话框。

还有人有其他想法吗?

javascript:

    $(document).ready(function() {

        // Register the pleaseWaitDialog element as a jquery-ui dialog widget with certain options set 
        $("#pleaseWaitDialog").dialog({
            autoOpen: false,
            buttons: {},
            open: function(event, ui) { $(".ui-dialog-title, .ui-dialog-titlebar-close").hide(); }, // hide the dialog title bar 
            resizable: false,
            show: {effect: 'fade', duration: 500},
            height: 120,
            width: 300
        });

        // When a link to add a meeting is clicked, then display the please wait dialog 
        $("a.addMeetingLink").click(function(e) {
            // But wait 5 seceonds before displaying the please wait dialog 
            setTimeout(function () {
                $("#pleaseWaitDialog").dialog("open");
            }, 5000);
        });

    }); 

HTML:

<a href="/ripplemobile/trip/addmeeting/81/1/305/308" class="addMeetingLink">Add Meeting</a>

<div id="pleaseWaitDialog">
    <div>
        <p>Please wait</p>
        <img src="/ripplemobile/images/ajax-loader.gif" />
    </div>
</div>

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-ui-dialog


    【解决方案1】:

    快速点,编辑这个函数:

    // When a link to add a meeting is clicked, then display the please wait dialog 
            $("a.addMeetingLink").click(function(e) {
    
                // ADD
    
                e.preventDefault();
    
                // But wait 5 seceonds before displaying the please wait dialog 
                setTimeout(function () {
                    $("#pleaseWaitDialog").dialog("open");
                }, 5000);
            });
    

    这应该可以解决您当前的问题。

    【讨论】:

    • 我试过这个。这将使请稍候对话框显示(即使在 Safari 中),但它将不再继续到锚标记的 href 位置。那么如何同时关注锚标签并显示对话框呢?
    • 您的意思是显示对话框然后在延迟后跟随 href?当跟随 href 时,对话框将在您移动到 ​​href 目标时关闭如果您希望显示对话框然后继续到目标,您可以在打开对话框后添加另一个超时以转到目标
    • No 延迟后不遵循href。我希望跟随 href 并且存在固有的延迟,因为它需要服务器时间来处理请求并提供响应。在等待服务器响应期间,我希望浏览器等待 5 秒,如果服务器仍未响应,则显示请等待对话框。然后对话框将一直显示,直到服务器最终响应,在这种情况下对话框消失并显示新页面。如果服务器恰好在 5 秒前做出响应,那么用户将永远看不到请稍候对话框。
    • 我的原始代码满足这些要求,并在 Firefox 和 Chrome 中按预期工作。 Safari 不工作。在 Safari 中,会遵循 href,但不会显示任何对话框。实际上,我可以完全删除 setTimeout 函数,以尝试在单击链接时仅显示请稍候对话框,但它仍然不会显示该对话框。它只会等待服务器响应并最终转到 href url。 Safari 的意外行为是我问题的症结所在。
    • 你发现了吗?我有完全相同的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 2016-09-21
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多