Sweetalert组件未在使用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;
});

解决方法

return false;中的.each(function (indiceJ,elemento) {..});语句只是打破了循环,但并没有阻止执行继续执行整个click事件函数中的//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 
// ...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...