Ir para conteúdo

POWERED BY:

Arquivado

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

Milton Júnior

[Resolvido] Evento click não é chamado

Recommended Posts

Olá pessoal, meu código é o seguinte:

 

index.php

<script type="text/javascript" src="../jquery-1.4.2.min.js"></script>

<script>

$(document).ready(function() {

function ListaContatos(){

$.post("listaregistro.php", {},

function(data){ $("#divListar").html(data); }

)}

 

$("#linklistar").click(function(){ ListaContatos(); });

 

 

$("a#deletar").click(function(){

var idPost = $(this).attr("val");

$.post("deletaregistro.php", {id: idPost},

function(data){ $("#divListar").html(data); }

)

});

 

});

</script>

</head>

<body>

<a id="linklistar" href="#">LISTAR</a>

<br><br>

<div id="divListar" style="visibility:visible;">

<?php

include "listaregistro.php";

?>

</body>

</html>

 

listaregistro.php

<?php

$conexao = mysql_pconnect("localhost","root","") or die (mysql_error());

$banco = mysql_select_db("jquery_banco1");

 

$exec = mysql_query("SELECT id, nome FROM tabcontatos order by nome asc") or die("erro no select 2".mysql_error());

while($campos=mysql_fetch_array($exec)) {

echo $campos['nome']." <a href=\"javascript://\" val=\"".$campos['id']."\" id=\"deletar\">deletar</a><br>";

}

?>

 

não vou postar o código do deletaregistro.php por ser tão simples quanto o do listarregistro.php. ;)

 

Então vamos ao problema:

o evento click() do link '#deletar', ao lado de cada contato, só funciona 1 vez quando a pagina listaregistro.php é carregada no include "listaregistro.php".

a partir daí, o evento click() do '#deletar' não é mais executado, e se eu mandar listar denovo atravéz do link '#linklistar', o evento tbm não funciona.

já testei tudo que pude de acordo com meu conhecimento limitado, mas já sei que não é problema na parte php e sim no código jQuery, sou iniciante nele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa atrelar dinamicamente a função nesse evento (click)

use o metodo live do jQuery para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa atrelar dinamicamente a função nesse evento (click)

use o metodo live do jQuery para isso.

 

Amigo William, você não foi muito claro pra mim. Tem dois eventos click: o do #linklistar e do #deletar.

hà que função você se refere?

e que alteração seria essa?

o metodo live eu até posso procurar na documentação do jQuery mas preciso entender a sua sugestão!

Compartilhar este post


Link para o post
Compartilhar em outros sites

no #deletar

 

apesar de ser errado você duplicar ID assim.

A alteração é:

$("a#deletar").click(function(){
por algo como:

$("a#deletar").live('click', function(){

Porém prefira trabalhar com class, já que você tem várias linhas..e duplicar IDs é incorreto.

while($campos=mysql_fetch_assoc($exec)) {
echo $campos['nome'].' <a href="#" val="'.$campos['id'].'" class="deletar">deletar</a><br />';

já que vai precisar apenas da parte associativa do array retornado na consulta, prefira o fetch_assoc(), pois será mais rápido que o fetch_array()

Compartilhar este post


Link para o post
Compartilhar em outros sites

William meu querido, muito obrigado!

Deu certinho, prova que você manja do assunto. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Bem, eu segui sua segunda dica e troquei o fetch_array por fetch_assoc, mas confesso que não entendi muito bem, pois, olhei no manual do php e a descrição é a mesma para ambos:

mysql_fetch_array = Retorna uma matriz que corresponde a linha obtida e move o ponteiro interno dos dados adiante.

mysql_fetch_assoc = Retorna uma matriz associativa que corresponde a linha obtida e move o ponteiro interno dos dados adiante. mysql_fetch_assoc() é equivalente a utilizar mysql_fetch_array()

 

a única diferença que observei foi que o fetch_array possibilita escolher o tipo do array retornado, que pode ser associativo, numérico ou ambos.

já o fetch_assoc só retorna um array associativo.

 

Muito obrigado mais uma vez!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o fetch_array possibilita escolher o tipo do array retornado, que pode ser associativo, numérico ou ambos.

já o fetch_assoc só retorna um array associativo.

 

Exatamente! e por isso é mais lento !

já que você não usa o numérico, está retornando desnecessariamente !

 

se vai usar só a parte associativa, trabalha com o assoc logo duma vez! ^_^

tudo que é 'desnecessário', acaba 'sobrando'. E em muitos casos, oque 'sobra' em programação 'custa algo', e oque 'custa', 'pesa', e se 'pesa' é 'lento' :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkkk... boa...

 

explicação simples e objetiva! rs..

agora você me convenceu, valeu mais uma vez!

 

Ah... e aproveitando que você é moderador... da próxima vez que eu postar uma dúvida, como faço pra mudar mo tópico como [Resolvido]? ou é só moderador que pode?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só voltar e dizer como resolveu. Nós da equipe que alteramos o título.

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.