2009-07-09 13 views
0

Mon script PHP génère une table avec des lignes qui peuvent être éditées ou supprimées. Il existe également une possibilité de créer une nouvelle ligne. Le PHP est activé via jQuery Events.La table ne répond pas à la deuxième requête jQuery

Maintenant, tout fonctionne bien, je peux modifier supprimer et créer un élément. Après chaque action qui utilise le script PHP, la table HTML est mise à jour.

Mais lorsque j'essaie d'effectuer une action à nouveau après un événement, la table HTML n'est pas mise à jour mais en arrière-plan, le script PHP crée une entrée dans la base de données. Est-ce que quelqu'un d'entre vous sait pourquoi mon HTML Table ne se met pas à jour quand je déclenche un deuxième événement?

Voici le script:

PHP

<?php 
    require_once "../../includes/constants.php"; 
    // Connect to the database as necessary 
    $dbh = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) 
    or die ("Unaable to connnect to MySQL"); 

    $selected = mysql_select_db(DB_NAME,$dbh) 
    or die("Could not select printerweb"); 

    $action = $_POST['action']; 
    $name = $_POST['name']; 
    $id = $_POST['id']; 

    if($action == "new") 
     { 
     mysql_query("INSERT INTO `place` (`id`, `name`) VALUES (NULL, '$name')"); 
     } 
    elseif($action == "edit") 
     { 
     mysql_query("UPDATE `place` SET `name` = '$name' WHERE `id` = '$id'");   
     } 
    elseif($action == "delete") 
     { 
     mysql_query("DELETE FROM place WHERE id = '$id'"); 
     } 

    echo "<table><tbody>"; 
    $result = mysql_query("SELECT * FROM place"); 
    while ($row = mysql_fetch_array($result)) { 
     echo "<tr><td id=".$row["id"]." class=inputfield_td><input class=inputfield_place type=text value=".$row["name"]." /></td><td class=place_name>".$row["name"]."</td><td class=edit>edit</td><td class=cancel>cancel</td><td class=delete>delete</td><td class=save>SAVE</td></tr> \n"; 
    } 
    echo "</tbody>"; 
    echo "</table>"; 
    echo "<input type=text class=inputfield_visible />"; 
    echo "<button class=new>Neu</button>"; 
?> 

JS

$(function() { 
    $.ajax({ 
    url: "place/place_list.php", 
    cache: false, 
    success: function (html){ 
    $("#place_container").append(html); 
     } 
    }); 
    $(".edit").live("click", function() { 
    $(this).css("display","none").prevAll(".place_name").css("display","none").prevAll(".inputfield_td").css("display","block").nextAll(".cancel").css("display","block").nextAll(".save").css("display","block").prevAll(".inputfield_td").css("display","block"); 
    }); 
    $(".cancel").live("click", function() { 
    myvariable5 = $(this).prevAll(".place_name").html(); 
    $(this).css("display","none").prevAll(".edit").css("display","block").prevAll(".place_name").css("display","block").prevAll(".inputfield_td").css("display","none").nextAll(".save").css("display","none").siblings().find("input[type=text]").val(myvariable5); 
    }); 
    $(".save").live("click", function() { 
    var myvariable1 = $(this).siblings().find("input[type=text]").val(); 
    var myvariable2 = $(this).prevAll("td:last").attr("id"); 
    $(this).css("display","none").prevAll(".cancel").css("display","none").prevAll(".edit").css("display","block").prevAll(".place_name").css("display","block").prevAll(".inputfield_td").css("display","none"); 
    $.post("place/place_list.php", {action: "edit", name: ""+myvariable1+"", id: ""+myvariable2+""}, function (html){$("#place_container").replaceWith(html);}); 
    }); 
    $(".delete").live("click", function() { 
    var myvariable3 = $(this).prevAll("td:last").attr("id"); 
    $.post("place/place_list.php", {action: "delete", id: ""+myvariable3+""}, function (html){$("#place_container").replaceWith(html);}); 
    }); 
    $(".new").live("click", function() { 
    var myvariable4 = $(this).prevAll("input[type=text]").val(); 
    $.post("place/place_list.php", {action: "new", name: ""+myvariable4+""}, function (html){$("#place_container").replaceWith(html);}); 
    }); 
}); 
+0

avez-vous essayé de déboguer votre code avec Firebug? – montrealist

+0

Vous devez également entourer vos valeurs de paramètre avec des guillemets simples (ie class = 'inputfield_td', pas class = inputfield_td) – montrealist

Répondre

2

Je pense que je sais. Vous faites remplacer par au lieu de ajouter, ainsi votre DIV avec ID #place_container disparaît après la première opération (il ne vous reste qu'une table dans votre page), et bien sûr jQuery ne le trouve pas et ne peut pas le rafraîchir avec nouveau contenu de la deuxième opération.

Utilisez simplement append ou, mieux encore, html méthodes.

+0

Merci beaucoup pour votre aide, maintenant ça marche parfaitement ! – elhombre

+0

Attendez ... maintenant il génère 4 fois la même ligne dans la table HTML et la base de données? – elhombre

+0

Lorsque je passe à un onglet d'interface utilisateur spécifique et revenir en arrière puis cette erreur apparaît, en passant à d'autres onglets ne générera pas ce problème. – elhombre

2

Shouldnt vous remplacez le tableau complet?

$("#place_container").html(html); 
+0

Mon conteneur n'est pas rempli de contenu au point d'initiation de la JS, donc je ne pense pas que cela aurait le contenu est ajouté? – elhombre

+1

Et qu'en est-il de la deuxième, troisième, nième demande? – VolkerK

+0

La nième requête sera remplacée par la requête replaceWith? – elhombre

Questions connexes