Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nodigo

tabela

Recommended Posts

ola,

um amigo meu me ajudou a fazer uma parte do codigo em js para colocar dados em tabela html.

este código.

var list = [
		{"desc":"Novo1", "qtde":"1"},
		{"desc":"Novo2", "qtde":"12"},
		{"desc":"Novo3", "qtde":"3"},
	];

	$.each(list, function(){
		var novo = $("#listaNova").clone();
		novo.id = "1";
		novo.show();
		novo.addClass("removeDepois");
		novo.appendTo("#lista");
		novo.find(".desc").text(this.desc);
		novo.find(".qtde").text(this.qtde);
	});

	$idtabela = null; 

	$("#lista tr td").on("click", function(){
		$idtabela = $(this).parent().index(); 
		$("#lista tr").removeClass("success");
		$(this).parent().addClass("success");
	});

a tabela em html e assim:

<table id="lista" class="table table-bordered table-striped table-condensed">
				  <tr>
				    <td>QTD</td>
				    <td>DESC</td>	
				  </tr>
				  <tr id="listaNova" style="display:none">
				    <td class='qtde'>0</td>
				    <td class="desc">AGUA</td>	
				  </tr>
				 </table>

na teoria cada vez que eu atribuo algo na lista em js e para adicionar no table html.

o problema e o seguinte.

em vez de ele adicionar o item que eu coloco na lista ele adiciona o item id="listaNova", ou seja, adiciona qtde 0 e desc água.

em vez do que eu coloquei, e também coloca 2 vezes um único item que adicionei.

 

caso possam ajudar, grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buenas,

 

cara, aqui funcionou como deveria. Também no jsfiddle

 

http://jsfiddle.net/sipmann/0ygwbwbv/

 

Não esta tendo nenhum retorno no console? E qual a versão do jQuery vc esta utilizando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente o código funciona, tinha retorno no console e eu não tinha percebido.

o retorno e esse:

Uncaught TypeError: Cannot read property 'length' of undefined

 

meu código php:

case 'adicionar':

			
			
			$sql = "SELECT CODM, DES2 FROM PRODUTO where CODM = '{$comando}'";

			foreach(conexao::query($sql) As $row)
			{
				$listatabela['venda'][$count]['desc'] 	= trim($row->DES2);
				$listatabela['venda'][$count]['codm'] 	= trim($row->CODM);
				$listatabela['venda'][$count]['qtde'] 	= 1;
				
				$i++;
			}
			$response->message = json_encode($listatabela);

 			
		break;

meu JS:

$.get(jsonServer, {action:'adicionar', comando: $(this).attr("data-comando").trim()}, function(r)
				{
					
					$jsn = JSON.parse(r);
					
					alert($jsn.message); 
					 

					$.each($jsn.venda , function()
					{
						//alert(this.desc);
						list = [{"desc": this.desc , "qtde": this.codm}];
					}); 
					
					$.each(list, function()
					{
						var novo = $("#listaNova").clone();
						novo.id = "1";
						novo.show();
						novo.addClass("removeDepois");
						novo.appendTo("#lista");
						novo.find(".desc").text(this.desc);
						novo.find(".qtde").text(this.qtde);
					});

					$idtabela = null; 

					
					$("#lista tr td").on("click", function()
					{
						$idtabela = $(this).parent().index(); 
						$("#lista tr").removeClass("success");
						$(this).parent().addClass("success");
					});
					

				});

Alguém consegue me informar o porque do erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, o erro em si quer dizer que você tentou pegar a propriedade .length de algo que não existe. Não cheguei a montar um cenário de teste, mas comece tentando juntar os dois ".each" que você tem ai.

 

Este:

$.each($jsn.venda , function() 
{
   //alert(this.desc);
   list = [{"desc": this.desc , "qtde": this.codm}];
}); 

e este:

$.each(list, function()
{
   var novo = $("#listaNova").clone();
   novo.id = "1";
   [...]
});

Pois no final acaba dando no mesmo. E no final, me leva a crer que o fato de você não ter inicializado a sua variável "list", acabou estourando erro dentro do jQuery pelo fato dela não existir.

 

Se não quiser juntar os each (isso reduziria o número de loops a serem realizados e não precisaria de nenhuma variável para armazenar), tente definir a sua variável antes dos dois each::

 

var list = [];

 

Se não ficou claro o que tentei explicar, pode me mandar MP

Compartilhar este post


Link para o post
Compartilhar em outros sites

com alguma mudanca no meu codigo.

o erro que esta aparecendo e esse:

 

Uncaught TypeError: Cannot use 'in' operator to search for '51' in {"venda":[{"desc":"COCA COLA","codm":"7","qtde":"1"}]}

 

repostando meu codigo:

 

php:

case 'adicionar':

			
			
			$sql = "SELECT CODM, DES2 FROM PRODUTO where CODM = '{$comando}'";

			foreach(conexao::query($sql) As $row)
			{
				$listatabela['venda'][$count]['desc'] 	= trim($row->DES2);
				$listatabela['venda'][$count]['codm'] 	= trim($row->CODM);
				$listatabela['venda'][$count]['qtde'] 	= 1;
				
				$i++;
			}
			$response->message = json_encode($listatabela);

			
 			
		break;

retornando o seguinte:

 

{"message":"{\"venda\":[{\"desc\":\"COCA COLA\",\"codm\":\"7\",\"qtde\":"1"}]}"}

 

meu js:

$.get(jsonServer, {action:'adicionar', comando: $(this).attr("data-comando").trim()}, function(r)
				{
					
					$jsn = JSON.parse(r);
					

					
					$.each($jsn.message , function()
					{
						list.push({"desc": this.desc , "qtde": this.codm});
					}); 
					
					$.each(list, function()
					{
						var novo = $("#listaNova").clone();
						novo.id = "1";
						novo.show();
						novo.addClass("removeDepois");
						novo.appendTo("#lista");
						novo.find(".desc").text(this.desc);
						novo.find(".qtde").text(this.qtde);
					});

					$idtabela = null; 

					
					$("#lista tr td").on("click", function()
					{
						$idtabela = $(this).parent().index(); 
						$("#lista tr").removeClass("success");
						$(this).parent().addClass("success");
					});

				});

o var list[] e uma variável global:

pelo que percebi o erro esta no primeiro each, quando ele pega os dados do json e coloca na list.

caso alguém saiba como ajuda

grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.