首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jquery confirm替换javascript confirm

用jquery confirm替换javascript confirm
EN

Stack Overflow用户
提问于 2013-10-15 14:20:40
回答 3查看 14.2K关注 0票数 4

我使用下面的代码来使用默认的javascript confirm by jquery ui对话框。

代码语言:javascript
复制
jQuery.extend({
    confirm: function(message, title, okAction) {
        jQuery("<div></div>").dialog({
            // Remove the closing 'X' from the dialog
            open: function(event, ui) { jQuery(".ui-dialog-titlebar-close").hide(); }, 
            buttons: {
                "Ok": function() {
                    jQuery(this).dialog("close");
                    return true;
                },
                "Cancel": function() {
                    jQuery(this).dialog("close");
                    return false;
                }
            },
            close: function(event, ui) { jQuery(this).remove(); },
            resizable: false,
            title: title,
            modal: true
        }).text(message);
    }
});

jQuery.confirm(
        "LogOut",
        "Do you want to log out",
        function() { 
        });

现在我需要在注销操作中使用相同的代码。这样我就可以替换代码中的javascript confirm。

代码语言:javascript
复制
<a class="homeImage" onclick="return confirm('Do you want to logout?');" href="/future/myhome/head?$event=logout">LOG OUT</a>

我现在面临的问题是,当我用另一个函数替换confirm并等待它的返回值做出决定时,对话框不会将值返回给变量。这两个函数同时执行(它显示警报,但它也被定向到href目标)。有没有办法使该方法返回true或false值,从而继续到href目标。

参考:jQuery ExtendjQuery UI Replacement for alert

相关问题:js override confirm

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-15 14:57:38

问题是默认confirm对话框是同步的,会阻塞整个浏览器UI。JQuery对话框是异步的,并且不会阻塞UI (因为它需要它来呈现)。

所以你的问题的答案如下。您需要更改:

代码语言:javascript
复制
         buttons: {
            "Ok": function() {
                window.location = "/future/myhome/head?$event=logout"
            },

代码语言:javascript
复制
 <a class="homeImage" onclick="return jQuery.confirm('Do you want to logout?');return false;" href="/future/myhome/head?$event=logout">LOG OUT</a>
票数 2
EN

Stack Overflow用户

发布于 2013-10-15 14:52:41

我不知道你是否真的能做到这一点,因为jQuery.dialog函数是异步的。

您可以使用promise库来设置按钮单击事件。但是,您不能简单地在onclick属性中指定一个方法,而必须通过代码来完成

代码语言:javascript
复制
var d = jQuery.Deferred();
d.resolve(true); // resolve is used then to mark the function as complete
return d.promise(); // return the promise

jsFiddle

代码语言:javascript
复制
jQuery.extend({
    confirm: function(message, title, okAction) {
        var d = jQuery.Deferred();
        jQuery("<div></div>").dialog({
            // Remove the closing 'X' from the dialog
            open: function(event, ui) { jQuery(".ui-dialog-titlebar-close").hide(); }, 
            buttons: {
                "Ok": function() {
                    jQuery(this).dialog("close");
                    d.resolve(true);
                    return true;
                },
                "Cancel": function() {
                    jQuery(this).dialog("close");
                    d.resolve(false);
                    return false;
                }
            },
            close: function(event, ui) { jQuery(this).remove(); },
            resizable: false,
            title: title,
            modal: true
        }).text(message);
        return d.promise();
    }
});

有关jQuery promise库的更多信息,请参阅jQuery reference

编辑:另一种设置方式:jsFiddle

票数 4
EN

Stack Overflow用户

发布于 2014-04-29 11:14:28

就我个人而言,我使用confirm more来有条件地执行函数或发布表单...

因此,使用您的示例,我将进行以下小更改:

代码语言:javascript
复制
buttons: {
         "Ok": function() {
              jQuery(this).dialog("close");
              okAction();  
         },

然后调用确认,如下所示:

代码语言:javascript
复制
onclick="jQuery.confirm('Do you want to logout?','Confirm:',function(){window.location='/future/myhome/head?$event=logout'}); return false;">LOG OUT</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19374499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档