11548 sujets

JavaScript, DOM et API Web HTML5

salut, c'est re-moi Smiley lol

Voilà rapidement mon souchis... Je travaille à améliorer un peu l'ergonomie d'une boîte à mp tout coder par moi.

Le code html d'affichage ressemble à ça :
<table border='1' class='pleine'>
<tr>
    <td>0000-00-00 00:00:00</td>
    <td><p><b>Sawen</b></p></td>
    <td><p onclick="show_hide(this,'747'); mplu(747)"><b>Titre du mp</b></p>
    <div id="747" style="display:none">texte du mp</div></td>
    <td><a class="menu" href="communication.php?choix=rediger&dest=Sawen&titre=blabla">R&eacute;pondre</a></td>
    <td><img id=747 src='images/mp-ouvert.png' alt='MP lu' title='MP non-lu' /></td>
    <td><a class='menu' href='communication2.php?id=747&type=1'>Suppr</a></td>
</tr>
<tr>
     <td>0000-00-00 00:00:00</td>
     <td><p><b>Sawen</b></p></td>
     <td><p onclick="show_hide(this,'748'); mplu(748)"><b>blablabla</b></p>
     <div id="748" style="display:none">blabla</div></td>
     <td><a class="menu" href="communication.php?choix=rediger&dest=Sawen&titre=blablabla">R&eacute;pondre</a></td>
     <td><img id=748 src='images/mp-ferme.png' alt='Mp non-lu' title='MP non-lu' /></td>
     <td><a class='menu' href='communication2.php?id=748&type=1'>Suppr</a></td>
</tr>
</table>


(oui, je sais le code html est un peu pourri^^)

Chaque mp est identifié par un id dans mes tables.

A l'heure actuelle, quand on clique sur le titre, ça dévoile le texte du mp (façon spoiler) grâce à ce code-là :

function show_hide(obj,bloc) 
{ 
  elt=document.getElementById(bloc); 
  if (elt.style.display == 'none') 
  { 
    elt.style.display='block'; 
  } 
  else 
  { 
    elt.style.display='none'; 
  } 
}


Mais je voudrais rajouter une seconde fonction qui serait celle de passer de "non-lu" à "lu" dans la table et sur la page.

function mplu(id)
{
   var xmlHttp=null;
  try
  {// Firefox, Opera 8.0+, Safari, IE7
    xmlHttp=new XMLHttpRequest();
  }
  catch(e)
  {// Old IE
  try
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  catch(e)
    {
    alert ("Votre navigateur ne supporte pas XMLHTTP, veuillez installer un navigateur plus récent (IE7+, FF2+, Opera 8+, Safari, Chrome)");
    return;  
    }
  }
  var url="communication2.php?id="+id+"&type=0";
  xmlHttp.open("GET",url,false);
  xmlHttp.send(null);
  document.getElementById(id).src='images/mp-ouvert.png';
  document.getElementById(id).title='MP lu';
  document.getElementById(id).alt='MP lu';
}


Le fichier.php marche très bien (c'est celui qui était utilisé avant, quand il fallait cliquer sur l'image avec l'enveloppe fermée).

Le truc c'est qu'il semblerait que mettre 2 appels de fonction sur 1 évent' ça marche que très moyen. (il ne fait que la première fonction).

Quelqu'un sait comment je peux faire ?
Au passage, je peux pas fusionner les deux car j'utilise le show_hide() ailleurs. Smiley lol
Modifié par Lothindil (09 Sep 2011 - 13:22)
(Toi, tu ne veux VRAIMENT pas passer par un fw comme jQuery...
Exemple pour le show_hide:
$('#id_du_bloc').toggle(); // voir toggle('effet'); pour appliquer un effet ou animation sympathique grâce à jQuery-UI

)

Tu ne veux pas appeller show_hide DANS mplu ?

En passant, je crois qu'un ID ne PEUT PAS commencer par un chiffre Smiley ohwell
l'id de la div passe très bien avec le chiffre Smiley cligne

pour le fw, c'est pas que je veux pas, c'est que j'ai pas encore eu le temps de m'y pencher Smiley ravi

Et effectivement, j'avais pas pensé à la solution toute simple d'appeler une des fonctions dans l'autre Smiley confused
La spec HTML est pas vraiment d'accord:
a écrit :
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").


Pirates des Caraïbes - style: "Et la spec... c'est la spec."

Fais attention à ne pas être pris de court par ce genre de considérations (même si je trouve louche d'avoir les colons et periods dans les qualified name... mais bon). C'est un coup à ce que plus rien ne marche du jour au lendemain (implémentation par navigateur).
Bon, bah s'il y tient... j'ai rajouté un "img" devant pour lui faire plaisir (suis pas contrariante Smiley murf )

Sinon c'est résolu, ça marche très bien ^^