Javascript 等待警报响应

Javascript 等待警报响应,javascript,jquery,sweetalert,Javascript,Jquery,Sweetalert,我目前有一个功能,当在下拉列表中更改值时,要求用户确认。使用标准的JavaScript确认,这可以很好地工作。这是我的建议 但是在使用时,更改事件总是在我能够确认/取消之前发生。也就是说,当我选择一个新值并按cancel时,它不会停止事件并重置以前的值。它通过常规的JavaScript确认对话框实现了这一点 还值得注意的是,这个JavaScript甚至可能是无效的,对JavaScript来说是非常新的,例如,从confirm函数返回和从swal函数返回不起作用 然而,在谷歌搜索之后,我发现有类似

我目前有一个功能,当在下拉列表中更改值时,要求用户确认。使用标准的JavaScript确认,这可以很好地工作。这是我的建议

但是在使用时,更改事件总是在我能够确认/取消之前发生。也就是说,当我选择一个新值并按cancel时,它不会停止事件并重置以前的值。它通过常规的JavaScript确认对话框实现了这一点

还值得注意的是,这个JavaScript甚至可能是无效的,对JavaScript来说是非常新的,例如,从confirm函数返回和从swal函数返回不起作用

然而,在谷歌搜索之后,我发现有类似问题的人

但这似乎有点不太正常,因为它阻止了任何操作,但当选择确认时,他会重新创建默认情况下应该调用的函数。对于这么简单的事情来说,这似乎是一个相当大的挑战


SweetAlert是否有可能像常规确认对话框一样工作?

该值不会被设置回原位,因为swal中的该值不是选择对话框,而是sweet alert对话框。因此,在您的更改事件中,您必须定义一个保存更改的select元素的变量,并在用户单击“否”时使用该变量设置回值

.change(function(e) {
    var select = this; // save select element to variable

    $(this).blur();
    return swal({
        title: "Are you sure?",
        text: "Do you want to change the dropdown?",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Yes",
        cancelButtonText: "No",
        closeOnConfirm: true,
        closeOnCancel: true
    },
    function(isConfirm) {
        if (isConfirm) {
            e.preventDefault();
            return true;
        } else {
            $(select).val(prev_val); // use select reference to reset value
           return false;
        }
    });
});

您可以在此中找到一个工作示例。

该值不会被设置回原位,因为swal中的该值不是select,而是sweet alert对话框。因此,在您的更改事件中,您必须定义一个保存更改的select元素的变量,并在用户单击“否”时使用该变量设置回值

.change(function(e) {
    var select = this; // save select element to variable

    $(this).blur();
    return swal({
        title: "Are you sure?",
        text: "Do you want to change the dropdown?",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Yes",
        cancelButtonText: "No",
        closeOnConfirm: true,
        closeOnCancel: true
    },
    function(isConfirm) {
        if (isConfirm) {
            e.preventDefault();
            return true;
        } else {
            $(select).val(prev_val); // use select reference to reset value
           return false;
        }
    });
});
您可以在此找到一个工作示例。

var prev_val; $+dropdownId.focusfunction{ prev_val=$this.val; }.ChangeFunction{ $this.blur; var self=这个; 回灌{ 标题:你确定吗?, 文本:是否要更改下拉列表?, 类型:警告, showCancelButton:true, confirmButtonColor:DD6B55, confirmButtonText:是的, 取消按钮文字:不, closeOnConfirm:true, closeOnCancel:对 }, 功能确认{ 如果我确定{ //preventDefault无效,因为更改事件已经发生 //如果确认为真,则不执行其他操作 //更改为上一个值 //e、 防止违约; 返回true; }否则{ //这里不引用dom元素 //它可能会被更改,因为稍后会通过swal库代码调用它,使用回调上下文之外声明的self。 $self.valprev_val; 返回false; } }; }; var prev_val; $+dropdownId.focusfunction{ prev_val=$this.val; }.ChangeFunction{ $this.blur; var self=这个; 回灌{ 标题:你确定吗?, 文本:是否要更改下拉列表?, 类型:警告, showCancelButton:true, confirmButtonColor:DD6B55, confirmButtonText:是的, 取消按钮文字:不, closeOnConfirm:true, closeOnCancel:对 }, 功能确认{ 如果我确定{ //preventDefault无效,因为更改事件已经发生 //如果确认为真,则不执行其他操作 //更改为上一个值 //e、 防止违约; 返回true; }否则{ //这里不引用dom元素 //它可能会被更改,因为稍后会通过swal库代码调用它,使用回调上下文之外声明的self。 $self.valprev_val; 返回false; } };
};你的代码不正常吗?@rishabhdev它正常运行。但是这很平淡,我想用SweetAlert对话框来做同样的事情。甚至SweetAlert代码似乎都是正确的。你有什么问题?@rishabhdev根据当前代码,我得到一个SweetAlert对话框,但它总是改变值。无论在对话框中按“取消”或“确认”按钮。我希望它停止更改事件,就像使用常规确认对话框一样。如果可能的话,请提供您使用Sweet Alert完成的代码的JSFIDLE。您的代码是否正常工作?@rishabhdev它用于常规JavaScript确认。但是这很平淡,我想用SweetAlert对话框来做同样的事情。甚至SweetAlert代码似乎都是正确的。你有什么问题?@rishabhdev根据当前代码,我得到一个SweetAlert对话框,但它总是改变值。无论在对话框中按“取消”或“确认”按钮。我希望它停止更改事件,就像使用常规的确认对话框一样。如果可能的话,请提供您使用Sweet Alert完成的代码的JSFIDLE。
.change(function(e) {
    var select = this; // save select element to variable

    $(this).blur();
    return swal({
        title: "Are you sure?",
        text: "Do you want to change the dropdown?",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Yes",
        cancelButtonText: "No",
        closeOnConfirm: true,
        closeOnCancel: true
    },
    function(isConfirm) {
        if (isConfirm) {
            e.preventDefault();
            return true;
        } else {
            $(select).val(prev_val); // use select reference to reset value
           return false;
        }
    });
});