$(document).ready(function(){ $("form#submit_wall").submit(function() { var message_wall = $('#message_wall').attr('value'); var id = $('#id').attr('value'); $.ajax({ type: "POST", url: "index.php?leht=pildid", data:"message_wall="+ message_wall + "&id="+ id, cache: false, success: function(){ $("ul#wall").prepend(""+message_wall+"", ""+id+""); $("ul#wall li:first").fadeIn(); alert("Thank you for your comment!"); } }); return false; }); }); some PHP ... while($row_pilt = mysql_fetch_assoc($select_pilt)){ print
e abaixo é meu script PHP que grava no mySQL.
É um script muito simples. No entanto, está ficando pouco complicado quando o envio. Uma vez que eu tenho mais de um formulário na minha página (por WHILE PHP LOOP), então quando eu envio – apenas o formulário FIRST é enviado. Além disso, quaisquer outros formulários subseqüentes que envio – os dados estão sendo copiados do primeiro formulário. Existe alguma function jQuery que limpa os dados? – ou há uma solução melhor.
Obrigado, Nick
É porque você está dando a cada formulário o mesmo id e, portanto, está enviando o primeiro elemento que ele encontra com esse id, ou seja, o primeiro formulário. O que você deve fazer é atribuir um ID exclusivo a cada formulário e, em seguida, dar a cada formulário uma function de envio AJAX que envie os dados específicos do formulário. Você pode usar a function $ .each () do jQuery para percorrer todos os formulários e $ (this) .attr (‘id’) dentro da function de envio para recuperar o ID específico do formulário.
UPDATE: conforme revelado pelo comentário sobre esta resposta, você realmente não precisa da function cada () porque o jQuery o aplica a todos os elementos do formulário de qualquer maneira.
Aqui seria um script de exemplo:
$(document).ready(function(){ $("form").submit(function() { var message_wall = $(this).children('input[type="text"]').attr('value'); var id = $(this).children('input[type="hidden"]').attr('value'); $.ajax({ type: "POST", url: "index.php?leht=pildid", data:"message_wall="+ message_wall + "&id="+ id, cache: false, success: function(){ $("ul#wall").prepend(""+message_wall+"", ""+id+""); $("ul#wall li:first").fadeIn(); alert("Thank you for your comment!"); } }); return false; }); });
Porque não podemos ver todas as suas form
, não tenho certeza absoluta , mas, dada a sua pergunta, vou assumir que as outras formas compartilham o mesmo id
( form#submit_wall
), o que é inválido, uma id
deve seja único dentro do documento.
Dado que você vai mudar o id
dos outros formulários (eu sugeriria usar um nome de class
, provavelmente, ‘submit_wall’, mas as especificações dependem de você), o jQuery também precisa ser alterado. A partir de:
$("form#submit_wall").submit(function() {
Para:
$("form.submit_wall").submit(function() { // using the class-name instead of the id.
Agora, é claro, você enfrenta os mesmos problemas de id
duplicada.
Então eu sugiro, novamente, mudar o id
para uma class
e mudar:
var message_wall = $('#message_wall').attr('value'); var id = $('#id').attr('value');
para:
var message_wall = $(this).find('.#message_wall').attr('value'); var id = $(this).find('.id').attr('value');
Dada a bagunça que você publicou, acima, acho difícil acreditar que isso é tudo que você precisa. Definitivamente, valeria a pena publicar a página completa (ou uma demonstração em JS Fiddle ou JS Bin ) que reproduz seu código.