11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai une messagerie interne au site que je développe.
Lorsque je veux supprimer plusieurs messages, je coche les checkbox et valide.
Je fais un appel Ajax pour ne pas avoir à recharger la page + afficher un message + faire disparaître les messages concernés.
Le problème, c'est que le message de suppressions des messages n’apparaît qu'au 1er clic. ensuite je n'ai plus de messages jusqu'au moment ou je recharge manuellement la page.
Et mon second problème vient du fait que si je coche plusieurs checkbox, en BDD elles seront bien supprimées, mais l'effet fadeOut ne se fait que sur une seule ligne.

Voici mon code

le JS
function ValidSuppression() {
    $(document).ready(function() {
        $("#id_form_suppression").on('submit', 'form', function() {
     
            id = $('#choix:checked').val();
 
            $.ajax({
                url: "suppr_test.php",
                type: "post",
                data: $('#choix:checked').serialize(),
                //data: id,
                success: function(data) {
                    $(".error").append(data).fadeOut(2000);
                    $("#ligne_"+id).fadeOut();
                }
            });
        return false;
        });
    });
}


le tableau de données
echo '<div class="error"></div><table class="mess">';
        echo '<thead><tr><th></th><th></th><th></th><th></th><th></th><th><small>'.$total_mess1.'</small></th></tr></thead><tbody>';
         
    echo '<div id="id_form_suppression">';
        echo '<FORM method="POST" action="#">';
 
    while($user=$req->fetch(PDO::FETCH_OBJ)) {
        if (($user->lu)==1) {
            echo '<tr id="ligne_'.$user->id.'"><td><input type="checkbox" id="choix" name="choix[]" value="'.$user->id.'"></td> <td><img src='.$urlImg.'mess_lu.png>';
        }
        else {
            echo '<tr id="ligne_'.$user->id.'"><td><input type="checkbox" id="choix" name="choix[]" value="'.$user->id.'"></td> <td><img src='.$urlImg.'mess_non_lu.png>';
        }
        if (($user->piece_jointe) <> ''){echo '<img src='.$urlImg.'piece_jointe.png></td>';}else{echo '</td>';}
         
            echo '<td>le '.dateFr($user->date_mess).'</td>';
            echo '<td>à '.nl2br(htmlspecialchars(ucfirst($user->prenom))). ' '.nl2br(htmlspecialchars(ucfirst($user->nom))).'</td>';
            echo '<td colspan="2"><a href="indv_env.php?id='.$user->id.'&session='.$user->session.'&lu='.$user->lu.'&token='.$user->token.'">';
            echo  nl2br(htmlspecialchars($user->titre_mess));
            echo '</a></td></tr>';
    }
            echo '</tbody></table><br>
                    <div class="mess_footer"><label><input onclick="CocheTout(this, \'choix[]\');" type="checkbox"><small>Tout sélectionner</small></label><br><br><input id="submit" type="submit" name="submit" value="Submit" onclick="ValidSuppression()" /></div></FORM></div>';


Requete SQL
if(isset($_POST['choix']) AND !empty($_POST['choix'])){// suppression du/des message(s)
        $count = count($_POST['choix']);
            foreach($_POST['choix'] as $id) {
                $suppr_env = "1";
                $res = Cnx::connectCnx()->prepare('UPDATE  messagerie m SET suppr_env='.$suppr_env.' WHERE m.id='.$id.'');
                $res->bindValue(':id', $id);
                $res->bindParam(':suppr_env', $suppr_env);
                $res->execute();
            }
            echo '<div class="apres_valid_mess">'. $count .' message(s) supprimé(s)</div>';
}
else {
    echo '<div class="new_mess_erreur"> Aucun message n\'a été selectionné</div>';
}

Quelqu'un a une idée svp?
J'ai remplacé
success: function(data) {
 $(".error").append(data).fadeOut(2000);
 $("#ligne_"+id).fadeOut();
}
// par
success: function(data) {
  alert(data);
                }

et l'alerte est lancée a chaque fois.

D'ou peut venir le problème?
Bonjour.

Pour ton premier problème je n'ai pas vraiment vu d'où peut venir le soucis, mais essaie de tester ça :
success: function(data) {
 $(".error").empty().append(data).fadeOut(2000);
 //$("#ligne_"+id).fadeOut();
}

Voir si ça va mieux.

Par contre ton deuxième problème doit être normal, tu as mis des id identiques sur tes deux checkbox (et ça c'est le mal), donc conclusion $('#choix:checked').val() doit te retourner un tableau (ou justement une valeur, la première), donc ça $("#ligne_"+id).fadeOut() ça doit virer juste une checkbox !