FAQFAQ
RechercherRechercher
Liste des MembresListe des Membres 
Groupes d'utilisateursGroupes d'utilisateurs
ProfilProfil 
S'enregistrerS'enregistrer 
 
  Prestations
Compétences
Engagements
Réferences
Contact
  Voyages
Baudelet.net
Vidéosurveillance
Trains de luxe
Croisiere
  Analyse HTML
Annuaire gratuit
Outils Google
Demande de devis
  Liens
livres
Magazines
Logiciels
 
ConnexionConnexion
Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés 
masquer un champ select

 
Poster un nouveau sujet   Répondre au sujet    SoftiForum Index du Forum -> Javascript, DHTML, HTML, XHTML, XML
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Rivo



Inscrit le: 12 Fév 2007
Messages: 5

MessagePosté le: Sam Juil 14, 2007 12:56 am    Sujet du message: masquer un champ select Répondre en citant

Sous IE, les champs select s'affiche toujours en premier quelque soit la valeur z-index de l'élément que l'on veut afficher au dessus de champ select.
Il s'agit d'un bug de IE (6 en tous cas). Seules les iframe "passent" au-dessus.
Voici la raison du problème :

http://download.microsoft.com/download/f/e/a/fea64d9a-7658-4939-84e9-186b8d16d52a/IEPlansAffichage.doc

Par exemple, pour qu'un div apparaisse au dessus des champs select, il suffit donc de mettre en place une iframe au même niveau que le div. Cela permet au contenu du div d'être affiché au dessus du select.

Code:

function putFrame(){
   var f    = document.createElement("iframe");
   var d    = document.getElementById("theDiv");

   with(f.style){
     position    = "absolute";
     width       = d.offsetWidth+"px";
     height      = d.offsetHeight+"px";;
     top          = d.offsetTop+"px";
     left      = d.offsetLeft+"px";
     zIndex     = "1";
   }

   document.body.appendChild(f);
}


Pour ce qui est de la liste des champs select (quelque soit le navigateur, l'iframe s'affiche en dessous de la liste), je ne vois pas la solution appropriée sauf peut être de joué sur l'emplacement du div pour que celle-ci ne passe pas au dessus de la liste (je parle ici d'un cas où le div suit le mouvement de la souris).

Il y a le même problème avec les flash mais heureusement, il y a un parametre pour corriger cela :
Code:
<param name="wmode" value="transparent">


Si quelqu'un trouve une solution pour la liste des champs, ce serait intéréssant de le savoir.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
mouarf
Medaille 2
Medaille 2


Inscrit le: 10 Juil 2006
Messages: 24
Localisation: Montpellier - France

MessagePosté le: Ven Juil 20, 2007 4:09 am    Sujet du message: Répondre en citant

Salut, désolé pas de solution. Par contre je patauge encore un peu en matière de graphisme évolué. Est ce que tu aurais un exemple d'utilisation de ta méthode Question
Est ce que coder l'apparition du champ select en fonction de condition permet de résoudre le problème Question
_________________
quand il ya une erreur sur un ordinateur, l'origine se situe entre la chaise et le clavier
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur MSN Messenger
Rivo



Inscrit le: 12 Fév 2007
Messages: 5

MessagePosté le: Ven Sep 28, 2007 10:36 pm    Sujet du message: masquer un champ select Répondre en citant

Voici un exemple d'utilisation qui permet d'afficher un info-bull sur les champs input/textarea/select.
J'ai pris la code source dans http://www.web-graphics.com/mtarchive/001717.php (site intéréssant à voir www.miniajax.com où il y a d'autres types de graphismes) ou www.miniajax.com et j'ai fais quelque modif car à l'origine, il était prévue pour afficher un info-bull sur les liens.

Code:

 var x=1,y=1;
function enableTooltips(id){ 
   var links,i,h,f; 
   if(!document.getElementById || !document.getElementsByTagName) return; 
   AddCss(); 
    //création du div pour l'affichage de l'info-bull
         //le texte à afficher sera dans l'attribut "title" de la balise
         //ex : <input title="message info-bull">
   h=document.createElement("div"); 
   h.id="btc"; 
   h.setAttribute("id","btc");
   h.style.position="absolute";
    h.style.zIndex="100000000";
    document.getElementsByTagName("body")[0].appendChild(h); 
    document.getElementById("btc").style.display="";
    //création du iframe qui sera placé en-dessous du div => cela grace à z-index   
    f = document.createElement("iframe");   
    f.id="btc_frame"; 
   f.setAttribute("id","btc_frame");   
    f.setAttribute("scrolling","no");
    //il y a encore un problème sous IE, les bordures de l'iframe s'affiche toujours
    f.style.border="none";   
    f.setAttribute("frameborder","0");
    f.style.position="absolute";
    f.style.zIndex="10000000";   
   
     document.getElementsByTagName("body")[0].appendChild(f);
    document.getElementById("btc_frame").style.display="";

//premet de definir les code html où on met les info-bull => il suffit de reproduire le bout de code et de préciser la balise html. On peut tout y mettre table/div/a/...
  if(id==null) links=document.getElementsByTagName("select"); 
  else links=document.getElementById(id).getElementsByTagName("select"); 
  for(i=0;i<links.length;i++){ 
    Prepare(links[i]); 
  }
   if(id==null) links=document.getElementsByTagName("input"); 
  else links=document.getElementById(id).getElementsByTagName("input"); 
  for(i=0;i<links.length;i++){ 
  Prepare(links[i]); 
  }
   if(id==null) links=document.getElementsByTagName("textarea"); 
  else links=document.getElementById(id).getElementsByTagName("textarea"); 
  for(i=0;i<links.length;i++){ 
  Prepare(links[i]); 
  }

function Prepare(el){ 
  var tooltip,t,b,s,l,frame;
   l="Demande de conseil : ";
  t=el.getAttribute("title"); 
  if(t==null || t.length==0) t="name:"; 
  el.removeAttribute("title"); 
  tooltip=CreateEl("div","tooltip");   
  s=CreateEl("div","top"); 
  s.appendChild(document.createTextNode(l)); 
  tooltip.appendChild(s); 
  b=CreateEl("b","bottom");     
  b.appendChild(document.createTextNode(t));     
  tooltip.appendChild(b); 
  setOpacity(tooltip);   
  el.tooltip=tooltip;     
  el.onmouseover=showTooltip; 
  el.onmouseout=hideTooltip; 
  el.onmousemove=Locate;   

function showTooltip(e){ 
  document.getElementById("btc").appendChild(this.tooltip);   
   document.getElementById("btc_frame").style.display="";
   Locate(e);   

function hideTooltip(e){ 
  var d=document.getElementById("btc"); 
  if(d.childNodes.length>0) d.removeChild(d.firstChild);
   //permet de cacher l'iframe
   document.getElementById("btc_frame").style.display="none";

function setOpacity(el){ 
  el.style.filter="alpha(opacity:85)"; 
  el.style.KHTMLOpacity="0.85"; 
  el.style.MozOpacity="0.85"; 
  el.style.opacity="0.85"; 

function CreateEl(t,c){ 
  var x=document.createElement(t); 
        x.className=c; 
         x.style.display="block";     
  return(x); 

function AddCss(){ 
  var l=CreateEl("link"); 
  l.setAttribute("type","text/css"); 
  l.setAttribute("rel","stylesheet"); 
  l.setAttribute("href","bt.css"); 
  l.setAttribute("media","screen"); 
  document.getElementsByTagName("head")[0].appendChild(l); 

function Locate(e){ 
  var posx=0,posy=0; 
  if(e==null) e=window.event; 
  if(e.pageX || e.pageY){
      //alert(1);
      if (posx==0||posy==0)
      {         
         posx=x+e.pageX; posy=y+e.pageY;
      }
      else
      {
         x=e.pageX;y=e.pageY;
         posx=e.pageX; posy=e.pageY; 
      }       
   } 
  else if(e.clientX || e.clientY){ 
     if(document.documentElement.scrollTop){           
        posx=e.clientX+document.documentElement.scrollLeft; 
        posy=e.clientY+document.documentElement.scrollTop;
     } 
      else{ 
           posx=e.clientX+document.body.scrollLeft; 
        posy=e.clientY+document.body.scrollTop;
       } 
  } 
   var f = document.getElementById("btc_frame");
   var d = document.getElementById("btc");
   f.style.width=d.offsetWidth+"px"; 
  f.style.height=d.offsetHeight+"px";
   
   //le div ne bouge plus lorsque le pointeur passe au dessus de la liste des champs select
   if (posx>400)
   {
     f.style.top=(posy-45)+"px"; 
     f.style.left=(posx-195)+"px";
      d.style.top=(posy-45)+"px"; 
     d.style.left=(posx-195)+"px";
   }
   



Au niveau de la page html, il suffit d'inserer le code suivant :
Code:

<script type="text/javascript" src="emplacement_du_script au_dessus.js"></script> 
<script type="text/javascript">
    window.onload=function(){enableTooltips("id_du balise_où_les_champ_se_trouve")};
</script>
<!-- si on ne met pas de paramettre("id_du balise_où_les_champ_se_trouve"), c'est la basile <body> qui sera pris par défaut donc tous les champs dans la balise body aura un info-bull-->


Pour ce code, il reste donc un problème au niveau de l'affichage de l'iframe (comment le caher sous IE????? Question ). Wink Ce n'est pas vraiment un gros problème car on peut toujours cacher la bordure de l'iframe avec la bordure du div de l'info-bull mais si quelqu'un trouve une solution:idea:, je suis preneur.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Rivo



Inscrit le: 12 Fév 2007
Messages: 5

MessagePosté le: Ven Sep 28, 2007 11:00 pm    Sujet du message: masquer un champ select Répondre en citant

J'ai oublié de préciser le style utilisé pour l'info-bull qui est déclaré dans dans le code javascript :
Code:

...
         x.style.display="block";     
  return(x); 

function AddCss(){ 
  var l=CreateEl("link"); 
  l.setAttribute("type","text/css"); 
  l.setAttribute("rel","stylesheet");
  //c'est ici  qu'on met le nom du style à utiliser
  l.setAttribute("href","bt.css"); 
  l.setAttribute("media","screen"); 
  document.getElementsByTagName("head")[0].appendChild(l); 

function Locate(e){ 
  var posx=0,posy=0; 
...


Voici un exemple du style :
Code:

.tooltip

   width: 200px; color:#1D38AE; 
   font:lighter 11px/1.3 Arial,sans-serif; 
   text-decoration:none;
   text-align:center;
   z-index:0;
}
    
.tooltip div.top
{
   z-index:0;
   padding-top:5px;
   background: url(chemin_de_l_image_utiliser_pour_le_haut_de_l_info_bull) no-repeat top;
}
 
.tooltip b.bottom
{
   z-index:0;
   padding-bottom:5px;
   color: #548912; 
   background: url(chemin_de_l_image_utiliser_pour_le_bas_de_l_info_bull) no-repeat bottom;


Pour plus de détail, voir l'exemple du code source : http://www.web-graphics.com/mtarchive/001717.php
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
tsiry



Inscrit le: 12 Déc 2006
Messages: 5

MessagePosté le: Ven Oct 19, 2007 8:39 pm    Sujet du message: Répondre en citant

Pour résoudre ton problême sous IE concernant l'affichage de l'iframe, il suffit juste d'ajouter dans le style associé à l'iframe le type visibility="hidden".
Tu auras comme ceci dans ton le style
Code:
   h=document.createElement("div");
   h.id="btc";
   h.setAttribute("id","btc");
   h.style.position="absolute";
   h.style.visibilty="hidden";


Allez bon développement.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    SoftiForum Index du Forum -> Javascript, DHTML, HTML, XHTML, XML Toutes les heures sont au format GMT + 9,5 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum