0
votes

Fonction JQuery en poste () Ne sélectionne pas les éléments de la fonction mère

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\">&nbsp;&nbsp;<a class=\"actionlink\" onclick=\"editPost(".$entry['id'].")\"><i class=\"far fa-edit\"></i>&nbsp;Edit</a></p>";
    echo "<p class=\"info\">&nbsp;&nbsp;<a class=\"actionlink\" onclick=\"deletePost(".$entry['id'].")\"><i class=\"far fa-trash-alt\"></i>&nbsp;Delete</a></p>";
    if(isset($entry['visible']) && $entry['visible'] == true){
      echo "<p class=\"info\">&nbsp;&nbsp;<a class=\"actionlink\" onclick=\"hidePost(".$entry['id'].")\"><i class=\"far fa-eye-slash\"></i>&nbsp;Hide</a></p>";
    } else {
      echo "<p class=\"info\">&nbsp;&nbsp;<a class=\"actionlink\" onclick=\"unhidePost(".$entry['id'].")\"><i class=\"far fa-eye\"></i>&nbsp;Unhide</a></p>";
    }
  }
  echo "</div>";
};


4 commentaires

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"; devrait définir un nouvel identifiant


Pouvez-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.


3 Réponses :


0
votes

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.

Il pourrait y avoir deux possibilités:

  1. DOM n'est pas complètement chargé.
  2. élément n'existe pas dans l'arbre DOM.

    Veuillez utiliser un rappel sur l'achèvement / fait de l'Ajax "Post" et écrivez votre fonctionnalité quelque chose comme ci-dessous le code. xxx


0 commentaires

0
votes

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>&nbsp;Hide");
$("#post-"+postid).attr("onclick", "hidePost(" + postid + ")");


2 commentaires

Cela fonctionne, merci: d mais , ne devrait pas this.id = "tempid"; 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! :)



0
votes

ou vous pouvez simplement changer la jQuery, bien que je ne l'ai pas essayé, de: XXX


1 commentaires

Déjà essayé "d'abord, j'ai essayé ceci un sélecteur, qui a sélectionné le .php , ..."