J'ai une fonction JavaScript, qui doit masquer un poste d'utilisateur sur appel, puis modifier le bouton pour appeler la fonction en faisant l'opposé (afficher) et afficher un texte modifié correspondant.
function displayPost($entry, $class = "entry1"){
$userid = $entry['userid'];
$username = getUserName($userid);
$created_at = DateTime::createFromFormat('Y-m-d H:i:s', $entry['created_at']);
echo "<div class=\"".$class."\" onclick=\"postById(".$entry['id'].")\"><p class=\"info\">Posted by <a class=\"userlink\" onclick=\"userById(".$userid.")\">".$username."</a> on ".$created_at->format('j.n.Y')." at ".$created_at->format('H:i')."</p>";
echo "<h2 class=\"title\">".$entry['title']."</h2>";
echo $entry['content'];
if(isset($_SESSION['userid']) && $entry['userid'] == $_SESSION['userid']){
echo "<br><p class=\"info\"> <a class=\"actionlink\" onclick=\"editPost(".$entry['id'].")\"><i class=\"far fa-edit\"></i> Edit</a></p>";
echo "<p class=\"info\"> <a class=\"actionlink\" onclick=\"deletePost(".$entry['id'].")\"><i class=\"far fa-trash-alt\"></i> Delete</a></p>";
if(isset($entry['visible']) && $entry['visible'] == true){
echo "<p class=\"info\"> <a class=\"actionlink\" onclick=\"hidePost(".$entry['id'].")\"><i class=\"far fa-eye-slash\"></i> Hide</a></p>";
} else {
echo "<p class=\"info\"> <a class=\"actionlink\" onclick=\"unhidePost(".$entry['id'].")\"><i class=\"far fa-eye\"></i> Unhide</a></p>";
}
}
echo "</div>";
};
3 Réponses :
J'espère que vous êtes conscient du concept d'événement à l'intérieur du navigateur, JavaScript est célibataire fileté et pour le faire asynchroniser le concept d'événement.
Tout d'abord dans votre code, il existe un "post" qui demande PHP et le succès que vous essayez d'accéder à certains éléments du DOM. P>
Il pourrait y avoir deux possibilités: p>
Veuillez utiliser un rappel sur l'achèvement / fait de l'Ajax "Post" et écrivez votre fonctionnalité quelque chose comme ci-dessous le code. p>
D'accord après avoir suivi votre code, je peux voir le problème que vous rencontrez.
$("#post-"+postid).html("<a class=\"fas fa-eye-slash\"></i> Hide");
$("#post-"+postid).attr("onclick", "hidePost(" + postid + ")");
Cela fonctionne, merci: d mais b>, ne devrait pas this.id = "tempid"; code> dans la JS définit un identifiant?
Pas vraiment depuis que vous ne l'utilisez pas réellement dans le code JS. Si l'identifiant a été utilisé plus d'une fois, je l'assignerais une variable puis l'utiliserait à sa place, par opposition à la concaténation des chaînes dans un identifiant. Heureux que cela fonctionnait! :)
ou vous pouvez simplement changer la jQuery, bien que je ne l'ai pas essayé, de:
Déjà essayé "d'abord, j'ai essayé ceci un sélecteur, qui a sélectionné le .php code>, ..." i>
Pouvez-vous publier le bit d'origine du HTML qui a l'identifiant de "#tempid" avec son parent HTML.
A fait, mais théoriquement
this.is = "tiède"; code> devrait définir un nouvel identifiantPouvez-vous clarifier votre besoin
Mettez un point d'arrêt dans le succès Rappelez-vous et voyez si la température est présente à cette époque, si oui, essayez de choisir parmi la console, sinon introduisez un délai d'attente. J'espère qu'il n'y a pas de cadres et de problèmes d'origine croisée.