Tenho uma dificuldade que anda me tirando o sono e se puderem me ajudar, agradeço.
Antes, farei um apanhado básico para que entendam o meu procedimento.
Tenho em um sistema uma tabela Pagamento, outra chamada Item_Pagamento e mais uma chamada de nome Conta. No meu formulário, preciso associar várias contas que estão na tabela Conta a um determinado pagamento que está na tabela Pagamento. Esta associação é feita na tabela Item_Pagamento.
O que faço nestas funções?
Na função salvarItemPgto(), pego o valor de todos os ítens do tipo checkbox de nome itempgto.
Perrcorro a lista de ítens de nome itempgto e quando estão "checados" como true, chamo a função verificaRegistroItem_Pgto(itempgto.value,cd_pagamento) para ver se aquele registro já existe no banco.
Se o registro já existir, não faço nada e continuo percorrendo a lista de checkbox, se não existir, chamo a função inserirItem_Pgto(Dados.cd_conta,Dados.cd_pagamento) para inserir um ítem na tabela Item_Pagamento e depois continuo percorrendo a lista de checkbox.
O que está acontecendo de errado(Qual o meu problema):
Toda a vez que marco mais de um checkbox, ele deveria fazer a varredura em todos os checkbox, ir verificando quem está marcado como true e que não existe no banco e em seguida, inserir no banco, mas o que acontece é que se eu marcar 2 checkbox por exemplo, quando eu clicar no botão Incluir Contas, ele só insere o primeiro que está marcado, e caso eu queira inserir o segundo, tenho que clicar novamente no botão Incluir Contas e assim por diante. No entanto, se eu "encher o código de alert" para ir ver onde está o erro, este erro não acontece, pois desta maneira, basta apenas eu clicar uma vez em Incluir Contas que ele inclui todos os registros marcados perfeitamente.
O que eu já tentei fazer:
Me disseram que é porque o Ajax é assíncrono, mas mesmo eu colocando false no atributo Async, não rola.
Coloquei uma simulação de sleep para ver se quando o código executa mais devagar ele rola, mas isto também não funcionou.
Função que percorre os ítens do tipo checkbox e chama as funções para verficação.
function salvarItemPgto(){
var cd_pagamento = document.getElementById('cd_pagamento').value;
var itempgto = document.getElementsByName('itempgto');
if(cd_pagamento != ""){
for(i=0;i<itempgto.length;i++){
if(itempgto[i].checked == true){
verificaRegistroItem_Pgto(itempgto[i].value,cd_pagamento);
}
else{
document.getElementById('aviso').innerHTML = "<p>Este item já existe ou não está marcado</p>";
}
}
}
else {
document.getElementById('aviso').innerHTML = "<p>Deve existir um Pagamento em aberto!</p>";
}
}
Função utilizada para verificar se registro já existe e se não existir, chama a função de inserir no Banco
Pergunta
Paulada
Olá pessoal!
Tenho uma dificuldade que anda me tirando o sono e se puderem me ajudar, agradeço.
Antes, farei um apanhado básico para que entendam o meu procedimento.
Tenho em um sistema uma tabela Pagamento, outra chamada Item_Pagamento e mais uma chamada de nome Conta. No meu formulário, preciso associar várias contas que estão na tabela Conta a um determinado pagamento que está na tabela Pagamento. Esta associação é feita na tabela Item_Pagamento.
O que faço nestas funções?
- Na função salvarItemPgto(), pego o valor de todos os ítens do tipo checkbox de nome itempgto.
- Perrcorro a lista de ítens de nome itempgto e quando estão "checados" como true, chamo a função verificaRegistroItem_Pgto(itempgto.value,cd_pagamento) para ver se aquele registro já existe no banco.
- Se o registro já existir, não faço nada e continuo percorrendo a lista de checkbox, se não existir, chamo a função inserirItem_Pgto(Dados.cd_conta,Dados.cd_pagamento) para inserir um ítem na tabela Item_Pagamento e depois continuo percorrendo a lista de checkbox.
O que está acontecendo de errado(Qual o meu problema):Toda a vez que marco mais de um checkbox, ele deveria fazer a varredura em todos os checkbox, ir verificando quem está marcado como true e que não existe no banco e em seguida, inserir no banco, mas o que acontece é que se eu marcar 2 checkbox por exemplo, quando eu clicar no botão Incluir Contas, ele só insere o primeiro que está marcado, e caso eu queira inserir o segundo, tenho que clicar novamente no botão Incluir Contas e assim por diante. No entanto, se eu "encher o código de alert" para ir ver onde está o erro, este erro não acontece, pois desta maneira, basta apenas eu clicar uma vez em Incluir Contas que ele inclui todos os registros marcados perfeitamente.
O que eu já tentei fazer:
Função que percorre os ítens do tipo checkbox e chama as funções para verficação.
function salvarItemPgto(){ var cd_pagamento = document.getElementById('cd_pagamento').value; var itempgto = document.getElementsByName('itempgto'); if(cd_pagamento != ""){ for(i=0;i<itempgto.length;i++){ if(itempgto[i].checked == true){ verificaRegistroItem_Pgto(itempgto[i].value,cd_pagamento); } else{ document.getElementById('aviso').innerHTML = "<p>Este item já existe ou não está marcado</p>"; } } } else { document.getElementById('aviso').innerHTML = "<p>Deve existir um Pagamento em aberto!</p>"; } }Função utilizada para verificar se registro já existe e se não existir, chama a função de inserir no Bancofunction verificaRegistroItem_Pgto(cd_conta,cd_pagamento){ AJAX.Url = '../requisicoes/phpItemPgto.php'; AJAX.Metodo = 'POST'; AJAX.DadosSend = 'strAcao=cmdVerifica'; AJAX.DadosSend+= '&cd_pagamento='+cd_pagamento; AJAX.DadosSend+= '&cd_conta='+cd_conta; AJAX.AjaxExecute(true); AJAX.CallBack = function(Dados){ if(Dados.status==1){ document.getElementById('aviso').innerHTML = Dados.strResposta; } else if(Dados.status==0){ document.getElementById('aviso').innerHTML = Dados.strResposta; inserirItem_Pgto(Dados.cd_conta,Dados.cd_pagamento); } } }Função para inserção do registro no bancofunction inserirItem_Pgto(cd_conta,cd_pagamento){ AJAX.Url = '../requisicoes/phpItemPgto.php'; AJAX.Metodo = 'POST'; AJAX.DadosSend = 'strAcao=cmdIncluir'; AJAX.DadosSend+= '&cd_pagamento='+cd_pagamento; AJAX.DadosSend+= '&cd_conta='+cd_conta; AJAX.AjaxExecute(true); AJAX.CallBack = function(Dados){ if(Dados.status==1){ document.getElementById('aviso').innerHTML = Dados.strResposta; } else{ document.getElementById('aviso').innerHTML = Dados.strResposta; } } }:mellow:
Editado por PauladaLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.