Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos, tenho o seguinte caso.
Ao clicar em um botão é gerado alguns inputs referente a determinado produto. Por ex:
[Adicionar Novo Produto] chama um ajax que gera numa div alguns campos, sao eles
codigo (conteúdo que vem de uma tabale do banco de dados, por isso que uso ajax)
lote
qtidade
kg saco
n sacos
preco base
icm
ipi
data entrega
O caso é que esses novos campos gerados pelo ajax nao sao reconhecidos, é me gerado que o campo é nulo.
Tem alguma forma de eu "forçar" esse reconhecimento de campo?
Se nao ficou claro me avisem, que eu posto o código.
Grato
Basicamente o erro está ali ao atribuo o valor ao lote_+i.
O engraçado é que se eu descomento meu alert, aonde é forçado me aparecer na tela o valor de i.. o código funciona e atribui os valores corretos. Caso contrário ele consta como lote_+i inválido.
Tem alguma forma de eu forçar esse i, sem ser por alert?
for (i=1; i<=document.getElementById("x").value; i++) {
if (quebra_var_lote[i-1] != 0) {
//alert(i);
document.getElementById("lote_"+i).value = quebra_var_lote[i-1];
}
}Não posso usar este código, pois o primeiro campo.. que é o de código é um select que vem listado registro do banco de dados... compreende?
>
Não precisa de AJAX para isso. Dá uma olhada: http://forum.imasters.com.br/index.php?/topic/325267-adicionar-remover-campos-dinamicamente/page__p__1441543entry1441543
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Na realidade não é nem forçar a variavel i, qualquer ALERT que eu colocar naquela linha comentada... faz funcionar meu código.
Não sei explicar... parece que tendo um alert ali ele le MELHOR e mais DEVAGAR (rs rs) o comando... assim, executando-o corretamente.
>
Ao clicar em um botão é gerado alguns inputs referente a determinado produto.
Então você já sabe de antemão, qual é o produto, sem precisar ir no banco.
Poste o teu código, mas acredito podemos fazer isso sem usar AJAX, apesar do problema não estar aparentemente relacionado a isso.
O caso é que esses novos campos gerados pelo ajax nao sao reconhecidos, é me gerado que o campo é nulo.
não entendi.
Vou postar passo a passo para que você entenda o processo.
É depois do ajax que defino o produto.
admcompras.asp
<%
Set rs = Server.CreateObject("ADODB.recordset")
Set rs = conexao.Execute("SELECT id_material FROM Material ORDER BY codigo ASC")
id = rs("id_material") 'identifico o ultimo id do banco
set rs = nothing
%>
<input type="text" id="ultimo_id" name="ultimo_id" value="<%=id%>" />
<!-- daqui pra baixo é feita a conferencia de todos os campos.. você vai entender como capturo-os mais tarde -->
<input type="text" id="todos_ids" name="todos_ids" value="<%=id%>_*_" />
<input type="text" id="todos_lote" name="todos_lote" value="0_*_" />
<input type="text" id="todos_qtidade" name="todos_qtidade" value="0_*_" />
<input type="text" id="todos_peso" name="todos_peso" value="25_*_" />
<input type="text" id="todos_nsaco" name="todos_nsaco" value="0_*_" />
<input type="text" id="todos_pbase" name="todos_pbase" value="0_*_" />
<input type="text" id="todos_icm" name="todos_icm" value="0_*_" />
<input type="text" id="todos_ipi" name="todos_ipi" value="0_*_" />
<input type="text" id="todos_entrega" name="todos_entrega" value="0_*_" />
<br />
<fieldset>
<legend>Materias Incluídos Nesta Compra:</legend>
<div id="recebeCompra">
<table border="0" cellpadding="0" cellspacing="1" width="99%" align="left">
<tr bgcolor="#CCCCCC" height="20px">
<td width="15%"><center><b>Código</b></center></td>
<td width="10%"><center><b>Lote</b></center></td>
<td width="10%"><center><b>Qtidade<!-- peso total --></b></center></td>
<td width="10%"><center><b>Kg Saco<!-- peso de cada saco --></b></center></td>
<td width="5%"><center><b>Nº Sacos</b></center></td>
<td width="10%"><center><b>P. Base<!-- preco por kilo --></b></center></td>
<td width="10%"><center><b>ICM</b></center></td>
<td width="10%"><center><b>IPI</b></center></td>
<td width="15%"><center><b>Entrega</b></center></td>
<td width="5%"><center><b>X</b></center></td>
</tr>
<tr>
<td>
<select name="cod_<%=x%>" id="cod_<%=x%>" class="chamada" style="width:80px;" onchange="SalvaDados(<%=x%>);">
<%
Set rs = Server.CreateObject("ADODB.recordset")
Set rs = conexao.Execute("SELECT codigo, id_material FROM Material ORDER BY codigo ASC")
if not rs.eof and not rs.bof then
do until rs.eof
%>
<option value="<%=rs("id_material")%>"><%=rs("codigo")%></option>
<%
rs.movenext
loop
end if
set rs = nothing
%>
</select>
</td>
<td align="center"><%=x%><input type="text" name="lote_<%=x%>" id="lote_<%=x%>" class="chamada" onblur="this.className='onblur';SalvaDados(<%=x%>);" size="2" onFocus="this.className='onfocus'" /></td>
<td align="center"><input type="text" name="peso_<%=x%>" id="peso_<%=x%>" class="chamada" onblur="this.className='onblur';SalvaDados(<%=x%>);" size="4" onFocus="this.className='onfocus'" /></td>
<td align="center"><input type="text" name="peso_saco_<%=x%>" id="peso_saco_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" value="25" /></td>
<td align="center"><input type="text" name="sacos_<%=x%>" id="sacos_<%=x%>" class="chamada" size="3" onblur="this.className='onblur';SalvaDados(<%=x%>);" onFocus="this.className='onfocus'" /></td>
<td align="center"><input type="text" name="preco_<%=x%>" id="preco_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" /></td>
<td align="center"><input type="text" name="icm_<%=x%>" id="icm_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" /></td>
<td align="center"><input type="text" name="ipi_<%=x%>" id="ipi_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" /></td>
<td align="center"><input type="text" name="dataentrega_<%=x%>" id="dataentrega_<%=x%>" class="chamada" size="8" onblur="this.className='onblur';SalvaDados(<%=x%>);" onFocus="this.className='onfocus'" /></td>
<td align="center"><center><a href=#><img src="imgs/deletar.png" alt="Excluir Material" title="Excluir Material" border="0" width="24" /></a></center></td>
</tr>
</table>
</div>
<table border="0" cellpadding="0" cellspacing="1" width="99%" align="left">
<tr>
<td colspan="10"> <div align="right">[<a onclick="add_pro();" style="cursor:pointer">Adicionar mais um produto</a>]</div>
</td>
</tr>
</table>
<input type="text" name="x" id="x" value="1<%'=x%>" />
funcao salva_dados()
function SalvaDados(x) {
//ATUALIZA CODIGO
variavel_ids = document.getElementById("todos_ids").value;
quebra_var_ids = variavel_ids.split('_*_');
if (document.getElementById("cod_"+x).value != "") {
ids = document.getElementById("cod_"+x).value;
} else {
ids = 0;
}
quebra_var_ids[x-1] = ids; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var_ids.length-1);
var monta_var_ids
var nova_var_ids
for (i=0; i<quebra_var_ids.length-1; i++) {
//alert(i);
if (i==0) {
monta_var_ids = quebra_var_ids[0] + '_*_';
} else {
monta_var_ids = monta_var_ids + quebra_var_ids[i] + '_*_';
}
}
document.getElementById("todos_ids").value = monta_var_ids;
// FIM ATUALIZA CODIGO
//ATUALIZA LOTE
variavel_lote = document.getElementById("todos_lote").value;
quebra_var_lote = variavel_lote.split('_*_');
if (document.getElementById("lote_"+x).value != "") {
lote = document.getElementById("lote_"+x).value;
} else {
lote = 0;
}
quebra_var_lote[x-1] = lote; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_lote
var nova_var_lote
for (i=0; i<quebra_var_lote.length-1; i++) {
if (i==0) {
monta_var_lote = quebra_var_lote[0] + '_*_';
} else {
monta_var_lote = monta_var_lote + quebra_var_lote[i] + '_*_';
}
}
document.getElementById("todos_lote").value = monta_var_lote;
// FIM ATUALIZA LOTE
//ATUALIZA QTIDADE
variavel_qtidade = document.getElementById("todos_qtidade").value;
quebra_var_qtidade = variavel_qtidade.split('_*_');
if (document.getElementById("peso_"+x).value != "") {
qtidade = document.getElementById("peso_"+x).value;
} else {
qtidade = 0;
}
quebra_var_qtidade[x-1] = qtidade; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_qtidade
var nova_var_qtidade
for (i=0; i<quebra_var_qtidade.length-1; i++) {
if (i==0) {
monta_var_qtidade = quebra_var_qtidade[0] + '_*_';
} else {
monta_var_qtidade = monta_var_qtidade + quebra_var_qtidade[i] + '_*_';
}
}
document.getElementById("todos_qtidade").value = monta_var_qtidade;
// FIM ATUALIZA QTIDADE
//ATUALIZA PESO SACO
variavel_peso = document.getElementById("todos_peso").value;
quebra_var_peso = variavel_peso.split('_*_');
if (document.getElementById("peso_saco_"+x).value != "") {
peso = document.getElementById("peso_saco_"+x).value;
} else {
peso = 0;
}
quebra_var_peso[x-1] = peso; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_peso
var nova_var_peso
for (i=0; i<quebra_var_peso.length-1; i++) {
if (i==0) {
monta_var_peso = quebra_var_peso[0] + '_*_';
} else {
monta_var_peso = monta_var_peso + quebra_var_peso[i] + '_*_';
}
}
document.getElementById("todos_peso").value = monta_var_peso;
// FIM ATUALIZA QTIDADE
//ATUALIZA NUMERO DE SACOS
variavel_nsaco = document.getElementById("todos_nsaco").value;
quebra_var_nsaco = variavel_nsaco.split('_*_');
if (document.getElementById("sacos_"+x).value != "") {
sacos = document.getElementById("sacos_"+x).value;
} else {
sacos = 0;
}
quebra_var_nsaco[x-1] = sacos; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_nsaco
var nova_var_nsaco
for (i=0; i<quebra_var_nsaco.length-1; i++) {
if (i==0) {
monta_var_nsaco = quebra_var_nsaco[0] + '_*_';
} else {
monta_var_nsaco = monta_var_nsaco + quebra_var_nsaco[i] + '_*_';
}
}
document.getElementById("todos_nsaco").value = monta_var_nsaco;
// FIM ATUALIZA NUMERO DE SACOS
//ATUALIZA PREÇO BASE (POR KG)
variavel_pbase = document.getElementById("todos_pbase").value;
quebra_var_pbase = variavel_pbase.split('_*_');
if (document.getElementById("preco_"+x).value != "") {
preco = document.getElementById("preco_"+x).value;
} else {
preco = 0;
}
quebra_var_pbase[x-1] = preco; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_pbase
var nova_var_pbase
for (i=0; i<quebra_var_pbase.length-1; i++) {
if (i==0) {
monta_var_pbase = quebra_var_pbase[0] + '_*_';
} else {
monta_var_pbase = monta_var_pbase + quebra_var_pbase[i] + '_*_';
}
}
document.getElementById("todos_pbase").value = monta_var_pbase;
// FIM ATUALIZA PREÇO BASE (POR KG)
//ATUALIZA ICM
variavel_icm = document.getElementById("todos_icm").value;
quebra_var_icm = variavel_icm.split('_*_');
if (document.getElementById("icm_"+x).value != "") {
icm = document.getElementById("icm_"+x).value;
} else {
icm = 0;
}
quebra_var_icm[x-1] = icm; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_icm
var nova_var_icm
for (i=0; i<quebra_var_icm.length-1; i++) {
if (i==0) {
monta_var_icm = quebra_var_icm[0] + '_*_';
} else {
monta_var_icm = monta_var_icm + quebra_var_icm[i] + '_*_';
}
}
document.getElementById("todos_icm").value = monta_var_icm;
// FIM ATUALIZA ICM
//ATUALIZA IPI
variavel_ipi = document.getElementById("todos_ipi").value;
quebra_var_ipi = variavel_ipi.split('_*_');
if (document.getElementById("ipi_"+x).value != "") {
ipi = document.getElementById("ipi_"+x).value;
} else {
ipi = 0;
}
quebra_var_ipi[x-1] = ipi; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_ipi
var nova_var_ipi
for (i=0; i<quebra_var_ipi.length-1; i++) {
if (i==0) {
monta_var_ipi = quebra_var_ipi[0] + '_*_';
} else {
monta_var_ipi = monta_var_ipi + quebra_var_ipi[i] + '_*_';
}
}
document.getElementById("todos_ipi").value = monta_var_ipi;
// FIM ATUALIZA IPI
//ATUALIZA DATAS DE ENTREGA
variavel_entrega = document.getElementById("todos_entrega").value;
quebra_var_entrega = variavel_entrega.split('_*_');
if (document.getElementById("dataentrega_"+x).value != "") {
entrega = document.getElementById("dataentrega_"+x).value;
} else {
entrega = 0;
}
quebra_var_entrega[x-1] = entrega; //troca o valor atual pelo novo valor digitiado, se define x-1 pois o vetor começa em 0 já nosso x inicia em 1
//alert(quebra_var.length-1);
var monta_var_entrega
var nova_var_entrega
for (i=0; i<quebra_var_entrega.length-1; i++) {
if (i==0) {
monta_var_entrega = quebra_var_entrega[0] + '_*_';
} else {
monta_var_entrega = monta_var_entrega + quebra_var_entrega[i] + '_*_';
}
}
document.getElementById("todos_entrega").value = monta_var_entrega;
// FIM ATUALIZA ENTREGA
distribui_valores();
}
funcao add_pro()
function add_pro(){
//ADICIONA DADOS ZERADOS PARA O NOVO PRODUTO
document.getElementById("todos_ids").value = document.getElementById("todos_ids").value + document.getElementById("ultimo_id").value + "_*_";
document.getElementById("todos_lote").value = document.getElementById("todos_lote").value + "0_*_";
document.getElementById("todos_qtidade").value = document.getElementById("todos_qtidade").value + "0_*_";
document.getElementById("todos_peso").value = document.getElementById("todos_peso").value + "25_*_";
document.getElementById("todos_nsaco").value = document.getElementById("todos_nsaco").value + "0_*_";
document.getElementById("todos_pbase").value = document.getElementById("todos_pbase").value + "0_*_";
document.getElementById("todos_icm").value = document.getElementById("todos_icm").value + "0_*_";
document.getElementById("todos_ipi").value = document.getElementById("todos_ipi").value + "0_*_";
document.getElementById("todos_entrega").value = document.getElementById("todos_entrega").value + "0_*_";
var x = document.getElementById("x").value;
x = eval(x)+eval(1);
document.getElementById("x").value = x;
var Ajax = createXMLHTTP();
var url ="add_prod.asp";
var recebeCompra = document.getElementById("recebeCompra");
var params = "x="+x;
Ajax.open("post", url, true);
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
Ajax.onreadystatechange=function(){
if(Ajax.readyState == 1) {
recebeCompra.innerHTML = '<center><img src=imgs/loader.gif></center>';}
if (Ajax.readyState==4){
recebeCompra.innerHTML = Ajax.responseText;}
}
Ajax.send(params);
distribui_valores();
}
funcao distribui_valores()
//funçao para jogar os valores dos campos TODOS nos respectivos campoas
function distribui_valores() {
var variavel_lote = document.getElementById("todos_lote").value;
var quebra_var_lote = variavel_lote.split('_*_');
//alert(quebra_var_lote[1]);
for (i=1; i<=document.getElementById("x").value; i++) {
var i = eval(i);
//if (quebra_var_lote[i-1] != 0) {
//alert(i);
alert("teste");
document.getElementById("lote_"+i).value = quebra_var_lote[i-1];
//}
}
}
arquivo add_pro.asp:
<table border="0" cellpadding="0" cellspacing="1" width="99%" align="left">
<tr bgcolor="#CCCCCC" height="20px">
<td width="15%"><center><b>Código</b></center></td>
<td width="10%"><center><b>Lote</b></center></td>
<td width="10%"><center><b>Qtidade<!-- peso total --></b></center></td>
<td width="10%"><center><b>Kg Saco<!-- peso de cada saco --></b></center></td>
<td width="5%"><center><b>Nº Sacos</b></center></td>
<td width="10%"><center><b>P. Base<!-- preco por kilo --></b></center></td>
<td width="10%"><center><b>ICM</b></center></td>
<td width="10%"><center><b>IPI</b></center></td>
<td width="15%"><center><b>Entrega</b></center></td>
<td width="5%"><center><b>X</b></center></td>
</tr>
<% for x=1 to request.form("x") %>
<tr>
<td>
<select name="cod_<%=x%>" id="cod_<%=x%>" class="chamada" style="width:80px;" onchange="SalvaDados(<%=x%>);">
<%
Set rs = Server.CreateObject("ADODB.recordset")
Set rs = conexao.Execute("SELECT codigo, id_material FROM Material ORDER BY codigo ASC")
if not rs.eof and not rs.bof then
do until rs.eof
%>
<option value="<%=rs("id_material")%>"><%=rs("codigo")%></option>
<%
rs.movenext
loop
end if
set rs = nothing
%>
</select>
</td>
<td align="center"><%=x%><input type="text" name="lote_<%=x%>" id="lote_<%=x%>" class="chamada" onblur="this.className='onblur';SalvaDados(<%=x%>);" size="2" onFocus="this.className='onfocus'" /></td>
<td align="center"><input type="text" name="peso_<%=x%>" id="peso_<%=x%>" class="chamada" onblur="this.className='onblur';SalvaDados(<%=x%>);" size="4" onFocus="this.className='onfocus'" /></td>
<td align="center"><input type="text" name="peso_saco_<%=x%>" id="peso_saco_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" value="25" /></td>
<td align="center"><input type="text" name="sacos_<%=x%>" id="sacos_<%=x%>" class="chamada" size="3" onblur="this.className='onblur';SalvaDados(<%=x%>);" onFocus="this.className='onfocus'" /></td>
<td align="center"><input type="text" name="preco_<%=x%>" id="preco_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" /></td>
<td align="center"><input type="text" name="icm_<%=x%>" id="icm_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" /></td>
<td align="center"><input type="text" name="ipi_<%=x%>" id="ipi_<%=x%>" class="chamada" size="1" onFocus="this.className='onfocus'" onBlur="this.className='onblur';SalvaDados(<%=x%>);" /></td>
<td align="center"><input type="text" name="dataentrega_<%=x%>" id="dataentrega_<%=x%>" class="chamada" size="8" onblur="this.className='onblur';SalvaDados(<%=x%>);" onFocus="this.className='onfocus'" /></td>
<td align="center"><center><a href="javascript: Exclui_Material('<%=preco_total%>','<%=codigo%>','<%''=rs("id_compra")%>','<%=id_sessao_compra%>','<%''=rs("entrega")%>'); Define_X('menos',<%''=rs("id_material")%>); "><img src="imgs/deletar.png" alt="Excluir Material" title="Excluir Material" border="0" width="24" /></a></center></td>
</tr>
<% next %>
</table>
o problema está na funçao distrubui valores, que tem a função de pegar todos aqueles campos "todos_"(alguma coisa) para distribuir nos campos abaixo gerado pelo ajax.
function distribui_valores() {
var variavel_lote = document.getElementById("todos_lote").value;
var quebra_var_lote = variavel_lote.split('_*_');
//alert(quebra_var_lote[1]);
for (i=1; i<=document.getElementById("x").value; i++) {
var i = eval(i);
//if (quebra_var_lote[i-1] != 0) {
//alert(i);
alert("teste");
document.getElementById("lote_"+i).value = quebra_var_lote[i-1];
//}
}
}
A questão é, com o ALERT funciona, sem o ALERT nao funciou... dá quqe meu lote_ é nulo.
deu pra entender?
Não precisa de AJAX para isso. Dá uma olhada: http://forum.imasters.com.br/index.php?/topic/325267-adicionar-remover-campos-dinamicamente/page__p__1441543entry1441543
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif