0
I have the following code that searches the product and creates the row in the table the way I want and then stores the data in a Json to be sent by post.
It only works when I input a new product. But I needed to store Json whenever I check a checkbox I create with jquery. But I’m not finding the command that I do it. I’ve tried every kind of command. Even test the console to show a message when I click on the checkbox, but it shows no message. Can anyone help me on how to capture the change in the checkbox?
have tried $( "input[type=checkbox]" ).on( "click", armazenarCampos);
But does not update.
Follows the code that generates the table:
var codigo = $("#codigo_barras");
codigo.on("keydown",function(e){
if(e.which == 13) {
e.preventDefault();
$.get("controle/pedido-troca-pendente-busca-produto.php?codigo="+codigo.val(),geraLinha);
}
});
function geraLinha(data){
var produto = jQuery.parseJSON(data);
if(produto.id_produto!=0){
var linha = $("<tr>").addClass("linha");
var colunaProduto = $("<td>").text(produto.produto);
var colunaTamanho = $("<td>").text(produto.tamanho);
var colunaPreco = $("<td>").text(produto.preco);
var colunaUsuario = $("<td>").text(produto.usuario);
var colunaDefeito = $("<td>");
var colunaRemove = $("<td>");
var campoIdProduto = $("<input>").addClass("id_produto").attr("type","hidden").attr("value",produto.id_produto);
var campoTamanho = $("<input>").addClass("tamanho").attr("type","hidden").attr("value",produto.tamanho);
var campoPreco = $("<input>").addClass("preco").attr("type","hidden").attr("value",produto.preco);
var campoTipoCobranca =$("<input>").addClass("tipo_cobranca").attr("type","hidden").attr("value",produto.tipo_cobranca);
var campoIdTabela = $("<input>").addClass("id_tabela").attr("type","hidden").attr("value",produto.id_tabela);
var campoDefeito = $("<input>").addClass("defeito").attr("type","checkbox").attr("value","true");
var link = $("<a>").addClass("botao-remover").addClass("btn").addClass("btn-danger").addClass("glyphicon").addClass("glyphicon-trash").attr("href","#");
colunaDefeito.append(campoDefeito);
colunaRemove.append(link);
linha.append(colunaProduto);
linha.append(colunaTamanho);
linha.append(colunaPreco);
linha.append(colunaUsuario);
linha.append(colunaDefeito);
linha.append(colunaRemove);
linha.append(campoIdProduto);
linha.append(campoTamanho);
linha.append(campoPreco);
linha.append(campoTipoCobranca);
linha.append(campoIdTabela);
$("#troca-pendente").append(linha);
codigo.val("");
}else{
$("#erro").toggle();
setTimeout(function(){
$("#erro").toggle();
},2000);
}
armazenarCampos();
}
function armazenarCampos() {
if($('.linha').length>0){
var produtos = [];
$('.linha').each(function(){
var id_produto = $(this).find(".id_produto").val();
var tamanho = $(this).find(".tamanho").val();
var preco = $(this).find(".preco").val();
var tipo_cobranca = $(this).find(".tipo_cobranca").val();
var id_tabela = $(this).find(".id_tabela").val();
if($(this).find("input:checked").val()){
var defeito = 1;
}else{
var defeito = 0;
}
var produto = {
id_produto:id_produto,
tamanho:tamanho,
preco:preco,
tipo_cobranca:tipo_cobranca,
id_tabela:id_tabela,
defeito:defeito
};
produtos.push(produto);
});
$("#produtos-troca").attr("name","produtos-troca").attr("value",JSON.stringify(produtos));
}
}
jquery generated html:
<tbody id="troca-pendente">
<tr class="linha">
<td>165 Caramelo</td>
<td>34</td>
<td>39.90</td>
<td>Admin</td>
<td><input class="defeito" type="checkbox" value="true"></td>
<td><a class="botao-remover btn btn-danger glyphicon glyphicon-
trash" href="#"></a></td>
<input class="id_produto" type="hidden" value="7">
<input class="tamanho" type="hidden" value="34"><input class="preco"
type="hidden" value="39.90">
<input class="tipo_cobranca" type="hidden" value="1">
<input class="id_tabela" type="hidden" value="3">
</tr>
<tr class="linha">
<td>01 Preto</td>
<td>38</td>
<td>39.90</td>
<td>Admin</td>
<td><input class="defeito" type="checkbox" value="true"></td>
<td><a class="botao-remover btn btn-danger glyphicon glyphicon-
trash" href="#"></a></td>
<input class="id_produto" type="hidden" value="8">
<input class="tamanho" type="hidden" value="38">
<input class="preco" type="hidden" value="39.90">
<input class="tipo_cobranca" type="hidden" value="1">
<input class="id_tabela" type="hidden" value="3">
</tr>
</tbody>
create a class in the checkbox to access for $('. sua_class') and then use the $change event ('. sua_class'). on('change', Function(){...});
– Ademilson Santana da Silva
$('.'default'). on('change',Function(){ console.log("clicked"); }); and does not work. Shows nothing in log
– Bruno
gave the log doing this?
– Ademilson Santana da Silva
Shows nothing. Does it have to do with being inside a <td>?
– Bruno
Got it, you’re creating the dynamite checkbox. So you have to link the event to the checkbox after creating it. So try $('. defect'). bind('change', Function (){...});
– Ademilson Santana da Silva
I attached the html generated in the post. Even the bind did not work
– Bruno
you are setting the event after the inputs are created?
– Ademilson Santana da Silva
I don’t know if I understood your question, but I put $( "input[type=checkbox]" ).on( "click", Function()? console.log("entered");} ); at the end of the jquery code
– Bruno
Solved with the answer below.
– Bruno