Sweetalert 组件未在 javascript 的循环内触发

Sweetalert component is not firing inside a loop with javascript

在一个 onclick 事件中,有三个用于验证的 sweetalert。我正在处理动态添加和删除的行,使用 jquery 和 javascript.

问题是第二个 sweetalert(在循环内)似乎与第三个 sweetalert 冲突,因为它没有触发......奇怪的是第一个 sweetalert 和第三个 sweetalert 总是正常工作 运行。当我评论第三个 sweetalert 部分时,第二个 sweetalert(在循环内)开始工作。我已经尝试了所有方法,但似乎与第二个 sweetalert 有一些冲突,也许是因为它在循环中,或者其他原因......有人知道如何帮助我吗?

HTML:

<div class="tab-pane" id="tabPessoaAnaliseCredito" role="tabpanel">
    <div class="form-horizontal">
        <div class="form-group row">
            <div class="col-md-12">
                <div class="col-md-12" id="div-pessoa-analise-credito">
                    <div class="form-group align-items-center row row-pessoa-analise-credito">
                        <div class="card card-shadow col-md-12 pl-0 pr-o pt-0 pb-0 border border-default">
                            <div class="card-block">
                                <div class="nav-tabs-horizontal" data-plugin="tabs">                    
                                    <div class="tab-content pt-20">
                                        <div class="tab-pane active tb-geral-conteudo" id="tb-geral-pessoa-analise-credito[@indiceI]" role="tabpanel">                       
                                            <div class="form-group row">
                                                <div class="col-md-12">
                                                    <div class="col-md-12" id="div-pessoa-analise-credito-consulta">                                   

                                                    
                                                    </div>
                                                </div>
                                            </div>
                                        </div>                    
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="form-group row">
        <div class="col-md-2">
            <button type="button" id="btn-add-pessoa-analise-credito" class="btn btn-dark">
                <i class="icon wb-plus" aria-hidden="true"></i>
                Nova Análise de Crédito
            </button>
        </div>
    </div>
</div>

JS:

$("#div-pessoa-analise-credito").on("click", ".btn-encerrar-pessoa-analise-credito", function (e) {
    e.preventDefault();

    var indiceI = $(this).closest('.row-pessoa-analise-credito').index();
    var hidPessoaAnaliseCreditoAnaliseEncerrada = $(this).closest('.row-pessoa-analise-credito').find('.hid-pessoa-analise-credito-analise-encerrada');
    var rowPessoaAnaliseCredito = $(this).closest('.row-pessoa-analise-credito');
    
    //Primeiro sweetalert 
    if (hidPessoaAnaliseCreditoAnaliseEncerrada.val() === 'True') {
        swal("Atenção!", "Análise de Crédito já [Encerrada]. :|", "warning");

        return false;
    }      
    
    //Segundo sweetalert 
    $(rowPessoaAnaliseCredito).find('.row-pessoa-analise-credito-consulta').each(function (indiceJ, elemento) {

        var orgaoProtecaoCredito = $(elemento).find('.sel-pessoa-analise-credito-consulta-orgao-protecao-credito').val();
        if (orgaoProtecaoCredito === '') {

             swal("Oops!", "O campo [Órgão de Proteção ao Crédito] é obrigatório.", "error");

            return false;
           
        }
    });
    
    //Terceiro sweetalert 
    swal({
        title: "Tem certeza?",
        text: "Esta operação encerrará e bloqueará permanentemente esta Análise de Crédito.",
        type: "warning",
        showCancelButton: true,
        confirmButtonClass: "btn-warning",
        confirmButtonText: 'Sim, prosseguir!',
        cancelButtonText: "Não, cancelar!",
        closeOnConfirm: false,
        closeOnCancel: false
        //timer: 2000
    }, function (isConfirm) {
        if (isConfirm) {
            hidPessoaAnaliseCreditoAnaliseEncerrada.val('True');
            bloquear_campos_pessoa_analise_credito(indiceI, rowPessoaAnaliseCredito);

            $(rowPessoaAnaliseCredito).find('.row-pessoa-analise-credito-consulta').each(function (indiceJ, elementoPessoaAnaliseCreditoConsulta) {
                bloquear_campos_pessoa_analise_credito_consulta(indiceI, indiceJ, elementoPessoaAnaliseCreditoConsulta);
            });

            swal("Sucesso!", "A Análise de Crédito foi encerrada e bloqueada! :)", "success");

        } else {
            swal("Cancelado", "Operação cancelada! :)", "error");
        }

        
    });

    //remove eventos (Atenção: se remover a limpeza dos dois eventos, a tabulação não funcionará, pois o Alert joga o foco todo para ele.)
    window.onkeydown = null;
    window.onfocus = null;
});

.each(function (indiceJ, elemento) {..}); 中的 return false; 语句只是跳出循环,但不会阻止执行继续执行整个点击事件函数中的 //Terceiro sweetalert 逻辑。

我怀疑在 .each() 循环之后添加一个标志来检查以确定您是否应该继续是您需要的:

// ...
//Segundo sweetalert 
var validationFailed = false;  // define our flag
$(rowPessoaAnaliseCredito).find('.row-pessoa-analise-credito-consulta').each(function (indiceJ, elemento) {

    var orgaoProtecaoCredito = $(elemento).find('.sel-pessoa-analise-credito-consulta-orgao-protecao-credito').val();
    if (orgaoProtecaoCredito === '') {

         swal("Oops!", "O campo [Órgão de Proteção ao Crédito] é obrigatório.", "error");
        validationFailed = true; // set the flag
        return false;
       
    }
});

// check our flag
if(validationFailed){
   return false; 
}

//Terceiro sweetalert 
// ...