【问题标题】:Receive value from callback javascript function从回调 javascript 函数接收值
【发布时间】:2016-07-04 12:50:56
【问题描述】:

我遇到以下编程场景的问题

我想在标签被删除之前确认标签的删除,所以当用户确认消息时,标签将被删除。

我面临的是由于异步js回调,回调函数不返回真值并返回null。

这里是代码

$(document).ready(function () {
        $("#categories").tagit({
            allowSpaces: true,
            beforeTagRemoved: function (evt, ui) {
                var isDeleted;
                $.confirm({
                    title:"Deactivate confirmation",
                    text:"Are you sure you want to deactivate this idea? Users will not be able to see this idea any more.",
                    confirm: function(button) {
                        isDeleted = true;
                    },
                    cancel: function(button) {
                        isDeleted = false;
                    },
                    confirmButton: "Yes",
                    cancelButton: "No",
                    confirmButtonClass: "btn-danger",
                });
                return isDeleted; // here is the problem, it returns null due to callback $.confirm function
            },
            afterTagRemoved: function (evt, ui) {
                $.ajax({
                    url: "/admin/categories/",
                    type: "POST",
                    data: '_method=delete&' + 'category=' + $("#categories").tagit('tagLabel', ui.tag) + '&_token={{csrf_token()}}',
                    success: function (data) {
                        if (data['status'] == 'success') {
                            $(".box-footer").html(
                                    '<div class="alert alert-success alert-dismissible">' +
                                    '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' +
                                    data['message'] +
                                    '</div>');
                        }
                        else {
                            $(".box-footer").html(
                                    '<div class="alert alert-danger alert-dismissible">' +
                                    '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' +
                                    data['message'] +
                                    '</div>');
                        }
                    }
                });
            },
            afterTagAdded: function (evt, ui) {
                if (!ui.duringInitialization) {
                    $.ajax({
                        url: "/admin/categories/",
                        type: "POST",
                        data: '_method=post&' + 'category=' + $("#categories").tagit('tagLabel', ui.tag) + '&_token={{csrf_token()}}',
                        success: function (data) {
                            console.log(data);
                            if (data['status'] == 'success') {
                                $(".box-footer").html(
                                        '<div class="alert alert-success alert-dismissible">' +
                                        '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' +
                                        data['message'] +
                                        '</div>');
                            }
                            else {
                                $(".box-footer").html(
                                        '<div class="alert alert-danger alert-dismissible">' +
                                        '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' +
                                        data['message'] +
                                        '</div>');
                            }
                        }
                    });
                }
            }
        });
    });

知道消息确认后如何解决问题并删除吗?

使用的库:Tagit.js、jquery.confirm.js

【问题讨论】:

    标签: javascript jquery jquery-plugins


    【解决方案1】:

    我总是会从 beforeTagRemoved 回调中返回 false 并在其中调用 $.confirm 。在 $.confirm 的confirm 回调中,我将手动触发标签删除

    更新: var isConfirmed = false;

    beforeTagRemoved: function (evt, ui) {
    
                    $.confirm({
                        title:"Deactivate confirmation",
                        text:"Are you sure you want to deactivate this idea? Users will not be able to see this idea any more.",
                        confirm: function(button) {
                            isConfirmed = true;
                            // trigger removing with isConfirmed set to true
                            $("#myTags").tagit("removeTagByLabel", "my-tag");
                        },
                        cancel: function(button) {
                            isConfirmed = false;
                        },
                        confirmButton: "Yes",
                        cancelButton: "No",
                        confirmButtonClass: "btn-danger",
                    });
                    return isConfirmed; 
                },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2021-03-15
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多