首页>Program>source
function ValidateField(){
var bAllow= true;
    //some checking here
if (bAllow == true && apl.val().trim() == "")
{ 
    showDialog(); 
    showDialog().done(function() {
        return true; // wanna return true, but not success
    }).fail(function() {
        return false; //wanna return false, but not success
    });
    return false; //stop it to execute to next line
}
return bAllow; //success return }
function showDialog(){
var def = $.Deferred();
var modPop = '<div id="diaCom" title="Information?"><p>something something</p></div>';
$("#diaCom").remove();
$(modPop).appendTo('body');
$("#diaCom").dialog({
    resizable: false,
    draggable: false,
    height:150,
    width:300,
    modal: true,
    buttons: {
        "Ok": function() {  
            def.resolve();
            $(this).dialog("close");
        },
        "Cancel": function() {
            def.reject();
            $(this).dialog("close");
        }
    }
});
return def.promise();
}
//on click
if (validateField() == true){
        //do something
 }else{
        //do something
  }
嗨,大家好,是否有机会返还value? 我希望通过showDialog()。done()返回true和false,并且对validatefield()函数失败,但是它不能按我想要的方式工作,我无法分配给bAllow,因为我已经拥有一个返回false来保存 对话框执行下一行,有什么想法吗? 还是这样做是正确的?

最新回答
  • 2021-1-12
    1 #

    嗯,这可以工作。

    您的对话框函数... showDialog()

    function confirmation(question) {
        var defer = $.Deferred();
        $('<div></div>')
            .html(question)
            .dialog({
                autoOpen: true,
                modal: true,
                title: 'Confirmation',
                buttons: {
                    "Yes": function () {
                        defer.resolve("true");//this text 'true' can be anything. But for this usage, it should be true or false.
                        $(this).dialog("close");
                    },
                    "No": function () {
                        defer.resolve("false");//this text 'false' can be anything. But for this usage, it should be true or false.
                        $(this).dialog("close");
                    }
                },
                close: function () {
                    $(this).remove();
                }
            });
        return defer.promise();
    }
    

    然后是使用该功能的代码...

    function onclick(){
        var question = "Do you want to start a war?";
        confirmation(question).then(function (answer) {
            var ansbool = Boolean.parse(answer.toString());
            if(ansbool){
                alert("this is obviously " + ansbool);//TRUE
            } else {
                alert("and then there is " + ansbool);//FALSE
            }
        });
    }
    

    对于大多数人来说,这似乎是错误的.但是在某些情况下,您无法不从JQuery Dialog返回。

    这基本上将模仿Confirm()函数.但是带有丑陋的代码和漂亮的确认框外观:)

    我希望这可以帮助一些人。


    EDIT: Bootstrap 3 Solution


    我现在正在使用NakuPanda的引导程序库,它确实运行良好.与JQueryUI基本相同,但位于Bootstrap UI中。

    function bsConfirm(question) {
        var defer = $.Deferred();
        BootstrapDialog.show({
            type: BootstrapDialog.TYPE_PRIMARY,
            title: 'Confirmation',
            message: question,
            closeByBackdrop: false,
            closeByKeyboard: false,
            draggable: true,
            buttons: [{
                label: 'Yes',
                action: function (dialog) {
                    defer.resolve(true);
                    dialog.close();
                }
            }, {
                label: 'No',
                action: function (dialog) {
                    defer.resolve(false);
                    dialog.close();
                }
            }],
            close: function (dialog) {
                dialog.remove();
            }
        });
        return defer.promise();
    }
    function bsAlert(error, message) {
        BootstrapDialog.show({
            type: error ? BootstrapDialog.TYPE_DANGER : BootstrapDialog.TYPE_SUCCESS,
            title: error ? "Error" : "Success",
            message: message,
            closeByBackdrop: false,
            closeByKeyboard: false,
            draggable: true,
            buttons: [{
                label: 'OK',
                action: function (d) {
                    d.close();
                }
            }]
        });
    }
    

    并使用它(大致相同的方式)

    bsConfirm("Are you sure Bootstrap is what you wanted?").then(function (a) {
        if (a) {
            bsAlert("Well done! You have made the right choice");
        } else {
            bsAlert("I don't like you!");
        }
    });
    

  • 2021-1-12
    2 #

    我已经创建了这个JSFIDDLE并更改了布尔分析,因为它已经崩溃了.谢谢,皮埃尔! 这节省了我很多时间。

    javascript:

    function confirmation(question) {
    var defer = $.Deferred();
    $('<div></div>')
        .html(question)
        .dialog({
            autoOpen: true,
            modal: true,
            title: 'Confirmation',
            buttons: {
                "Yes": function () {
                    defer.resolve("true");//this text 'true' can be anything. But for this usage, it should be true or false.
                    $(this).dialog("close");
                },
                "No": function () {
                    defer.resolve("false");//this text 'false' can be anything. But for this usage, it should be true or false.
                    $(this).dialog("close");
                }
            },
            close: function () {
                //$(this).remove();
                $(this).dialog('destroy').remove()
            }
        });
    return defer.promise();
    };
    function onclick(){
    var question = "Do you want to start a war?";
    confirmation(question).then(function (answer) {
        console.log(answer);
        var ansbool = (String(answer) == "true");
        if(ansbool){
            alert("this is obviously " + ansbool);//TRUE
        } else {
            alert("and then there is " + ansbool);//FALSE
        }
    });
    }
    $("#item").on('click', onclick);
    

    HTML:

    <button id="item">Hello, click me.</button>
    

  • 2021-1-12
    3 #

    为什么不使用带有resolve(" false")的拒绝方法.然后,您将能够传递一个对象作为参数。 假设您有多个输入字段集,每个字段都有一个删除按钮:

    function confirmation(question,obj) {
        var defer = $.Deferred();
        $('<div></div>')
            .html(question)
            .dialog({
                autoOpen: true,
                modal: true,
                title: 'Confirmation',
                buttons: {
                    "Oui": function () {
                        defer.resolve(obj);// pass the object to delete to the defer object
                        $(this).dialog("close");
                    },
                    "Non": function () {
                        defer.reject();//reject, no need to pass the object
                        $(this).dialog("close");
                    }
                },
                close: function () {
                    $(this).dialog('destroy').remove()
                }
            });
        return defer.promise();
    }
    $(document).on("click", ".btn-suppr",function (){// all delete buttons having a class btn-suppr
    var question = "Are you sure to delete this fieldset ?";
    confirmation(question,$(this)).then(function (obj) {
                                    obj.parent('fieldset').remove(); // remove the parent fieldset of the delete button if confirmed
                                });
                            });
    

  • ios:Google Plus API,可在Facebook等墙上张贴
  • 通过ajax渲染其他表单会导致其视图状态丢失,如何将其重新添加?