Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
955 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  problème de Style: véritable casse-tete! Help

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de Style: véritable casse-tete! Help

n°1363845
namerh
Posté le 10-05-2006 à 21:57:58  profilanswer
 

slt,  
 
dans le head j'ai:

Code :
  1. .calque {width: 100; height: 100; };


dans le body j'ai:

Code :
  1. <div id="Div1" style="width:500; height:250;">
  2. <div id="Div2"  class="calque">

"  
lorsqu'un evenement se produit sur un calque, je le traite dans une fonction qui notamment fait ceci:

Code :
  1. document.all("textbox1" ).value = parseInt(event.srcElement.style.width);

 
 
pour le DIV1: ça affiche correctement la valeur -> 500
pour le DIV2: ça affiche NaN    :??:  
 
je ne comprends pas pourquoi!  
la seul différence entre les deux DIV est que le style est défini par une class dans le second.
 
 
P.S. j'ai simplifié le code pour cibler le problème, mais je précise que seuls les paramètres "width" et "height" posent problème dans ma classe, les autres jouent leur role parfaitement.
 
Edited: codé pour I.E.


Message édité par namerh le 10-05-2006 à 22:39:33
mood
Publicité
Posté le 10-05-2006 à 21:57:58  profilanswer
 

n°1363871
FlorentG
Unité de Masse
Posté le 10-05-2006 à 23:20:20  profilanswer
 

Parce que c'est comme ça. Et il faut toujours préciser l'unité :

.calque {width: 100px; height: 100px; }


Sinon choc nucléaire sur d'autre navigateur (voir même sous IE avec un doctype strict).
 
Pour récupérer la vraie dimension, sans passer par les CSs, utilise la propriété offsetWidth :)

n°1363872
namerh
Posté le 10-05-2006 à 23:26:21  profilanswer
 

j'ai bien essayé en ajoutant les unités mais ça ne changer rien au problème :(

n°1363875
FlorentG
Unité de Masse
Posté le 10-05-2006 à 23:30:34  profilanswer
 

Comme dit, les unités c'est autre chose. Pour la propriété style.width, ça ne va prendre que si c'est renseigné par l'attribut style. Pour obtenir la largeur, tu peux utiliser offsetWidth (et offsetHeight pour la hauteur)

n°1363885
namerh
Posté le 10-05-2006 à 23:52:07  profilanswer
 

FlorentG a écrit :

Pour la propriété style.width, ça ne va prendre que si c'est renseigné par l'attribut style.


je ne comprends pas, tu veux dire que l'attribut style n'est pas renseigné dans le cas du 2e DIV défini avec ma class?

FlorentG a écrit :

Pour obtenir la largeur, tu peux utiliser offsetWidth (et offsetHeight pour la hauteur)

ça n'existe pas, par contre il y a clientwidth, d'après la doc en anglais que j'ai lue je ne suis pas sûr et certain que ça soit strictement équivalent en toutes circonstances au style.width.
 
De toute façon, j'aimerais comprendre pourquoi ça ne marche pas en passant par les styles!  :??:

Message cité 1 fois
Message édité par namerh le 11-05-2006 à 00:11:54
n°1363888
namerh
Posté le 10-05-2006 à 23:59:12  profilanswer
 

pour celles et ceux qui veulent tester:
voici un script complet illustrant le problème (compatible I.E. seulement):
 

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4.  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  5.  <style type="text/css">
  6.   .maclass { POSITION: absolute;
  7.      TOP: 300px;
  8.      WIDTH: 300px;
  9.      HEIGHT: 200px; 
  10.      BACKGROUND-COLOR: yellow; };
  11.  </style>
  12.  <script language="javascript">
  13.   function mafct()
  14.   {
  15.    document.all("textbox" ).value = parseInt(event.srcElement.style.width);
  16.   }
  17.  </script>
  18. </head>
  19. <body>
  20.  <div id="Div1" style="POSITION: absolute;
  21.       LEFT: 200px;
  22.       WIDTH: 555px;
  23.       HEIGHT: 200px; 
  24.       BACKGROUND-COLOR: yellow;" onclick="mafct();">
  25.   style défini dans DIV
  26.  </div>
  27.  <div id="Div2" class="maclass" onclick="mafct();">
  28.   style défini avec des class
  29.  </div>
  30.  <br><input type="text" id="textbox" style="background-color:#99FFFF"><br>
  31. </body>
  32. </html>

n°1363972
FlorentG
Unité de Masse
Posté le 11-05-2006 à 09:50:09  profilanswer
 

namerh a écrit :

je ne comprends pas, tu veux dire que l'attribut style n'est pas renseigné dans le cas du 2e DIV défini avec ma class?


Oui, la propriété style d'un objet DOMElement correspond à ce qu'il y a dans l'attribut style. Il est impossible à partir de la propriété style de récuperer ce qu'il est définit dans un style à part (avec des class donc). Il est donc normal que ça ne marche que pour le premier div.
 
cf. MSDN sur la propriété style :

Citation :

Represents the current settings of all possible inline styles for a given element.


"inline style" correspond donc bien à ce qu'il y a pour la div1
 
 

namerh a écrit :

ça n'existe pas


 [:johneh]  [:johneh]  [:johneh]  [:johneh]  
Euh... Biens-sûr que si, je ne sais pas quel documentation pourrie tu regarde :D Voir Element dimensions sur quirksmode.org. offsetWidth est même la meilleure méthode pour que ce soit crossbrowser. C'est même dans la MSDN, et dispo à partir d'IE 4 :)

Message cité 1 fois
Message édité par FlorentG le 11-05-2006 à 09:52:30
n°1363975
FlorentG
Unité de Masse
Posté le 11-05-2006 à 09:52:10  profilanswer
 

namerh a écrit :

pour celles et ceux qui veulent tester:
voici un script complet illustrant le problème (compatible I.E. seulement):
 

Code :
  1. [...]



Ultra-facilement faisable pour tous les navigateurs du marché : il suffit de laisser tomber le document.all complètement naze, et de le remplacer par document.getElementById, et d'utiliser this pour référencer l'élément qui a déclencher l'événement :
 

function mafct() {
  document.getElementById("textbox" ).value = parseInt(this.style.width);    
}

n°1364012
anapajari
s/travail/glanding on hfr/gs;
Posté le 11-05-2006 à 10:36:39  profilanswer
 

Suffit de l'arranger un peu ta fonction: si il existe un classname a ton div cliqué on va chercher la propriété width dans les styles sheets
un truc dans le genre:

Code :
  1. function mafct(obj) {
  2.   var width;
  3.   if ( ( obj.style.width == 'undefined' || obj.style.width=='') && (obj.className != 'undefined' && obj.className!='')){
  4.     theClass=obj.className;
  5.     var css = '';
  6.     if (document.styleSheets[0].cssRules){ css='cssRules';}
  7.     else if (document.styleSheets[0].rules){ css = 'rules';}
  8.     for (var j=0; j<document.styleSheets.length; j++){
  9.       for (var i=0; i<document.styleSheets[j][css].length; i++){
  10.         if (document.styleSheets[j][css][i].selectorText.substring(1,document.styleSheets[j][css][i].selectorText.length) == obj.className){
  11.           width = parseInt(document.styleSheets[j][css][i].style['width']);
  12.         }
  13.       }
  14.     }
  15.   } else if ( obj.style.width != 'undefined' && obj.style.width!=''){
  16.     width = parseInt(obj.style.width);
  17.   } else {
  18.     width= 'PB';
  19.   }
  20.   document.getElementById("textbox" ).value = width;
  21.   return 1;
  22. }


et tu oublies pas de faire tes appels comme ça:

Code :
  1. <div ... onclick="mafct(this)">...</div>


 
En plus ça doit marcher sur tous les navigateurs!

n°1364646
namerh
Posté le 11-05-2006 à 21:11:00  profilanswer
 

FlorentG a écrit :

Oui, la propriété style d'un objet DOMElement correspond à ce qu'il y a dans l'attribut style. Il est impossible à partir de la propriété style de récuperer ce qu'il est définit dans un style à part (avec des class donc). Il est donc normal que ça ne marche que pour le premier div.  


ok merci pour l'info.. (pas cool l'utilisation des CSS finalement)

FlorentG a écrit :

... Euh... Biens-sûr que si, je ne sais pas quel documentation pourrie tu regarde :D Voir Element dimensions sur quirksmode.org. offsetWidth est même la meilleure méthode pour que ce soit crossbrowser. C'est même dans la MSDN, et dispo à partir d'IE 4 :)

ben mince j'ai pas de peau alors: dans la MSDN 2004 sur CD ça n'y figure pas :(  et aujourd'hui j'ai tapé dans l'aide de Dreamweaver8: idem!
 

mood
Publicité
Posté le 11-05-2006 à 21:11:00  profilanswer
 

n°1364647
namerh
Posté le 11-05-2006 à 21:13:33  profilanswer
 

anapajari > ça me semble lourd à gérer au premier abord mais je vais étudier ton code car je ne connaissais pas ces possibilités..  

n°1364649
gatsu35
Blablaté par Harko
Posté le 11-05-2006 à 21:14:07  profilanswer
 

namerh a écrit :

ok merci pour l'info.. (pas cool l'utilisation des CSS finalement)
 ben mince j'ai pas de peau alors: dans la MSDN 2004 sur CD ça n'y figure pas :(  et aujourd'hui j'ai tapé dans l'aide de Dreamweaver8: idem!


Ouais ben c'est pas la dedans qu'il faut regarder hein :o

n°1364733
namerh
Posté le 12-05-2006 à 00:55:12  profilanswer
 

namerh a écrit :

ben mince j'ai pas de peau alors: dans la MSDN 2004 sur CD ça n'y figure pas :(  et aujourd'hui j'ai tapé dans l'aide de Dreamweaver8: idem!

gatsu35 a écrit :

Ouais ben c'est pas la dedans qu'il faut regarder hein :o

ah ben alors parlons-en justement.. où faut-il regarder alors si les aides intégré à l'EDI ne sont pas ok..  
consulter la MSDN on line avec le lien aimablement donné ci dessus?
ben déja que c'est pas facile de s'y retrouver dans les aides intégrées, là faut avoir la journée pour lire! par exemple: je tape array dans la MSDN on line (il n'y a pas possibilité de restreindre la recherche au langage qu'on cherche) et là ça m'affiche 250 pages de liens!  
 
Et à propos de l'objet Array au fait, il n'existe pas en javascript??  
parce que je ne l'ai trouvé qu'en Jscript :(

n°1364771
anapajari
s/travail/glanding on hfr/gs;
Posté le 12-05-2006 à 09:18:47  profilanswer
 

namerh a écrit :

anapajari > ça me semble lourd à gérer au premier abord mais je vais étudier ton code car je ne connaissais pas ces possibilités..


 :??: t'as a peine deux bouts de code, un qui teste s'il y a une classe et l'autre qui récupère directement le style!
 

namerh a écrit :

Et à propos de l'objet Array au fait, il n'existe pas en javascript??  
parce que je ne l'ai trouvé qu'en Jscript :(


Ok je comprends mieux pourquoi tu trouvais le script "lourd à gérer"... :o
 

n°1364815
FlorentG
Unité de Masse
Posté le 12-05-2006 à 10:04:02  profilanswer
 

namerh a écrit :

consulter la MSDN on line avec le lien aimablement donné ci dessus?


Euh... T'es sûr que tu regarde bien ? Parce moi dans la MSDN 2003, offsetWidth y apparaît très bien :( Dans MDSN Library\Web Development\HTML and Dynamic HTML\SDK Documentation\Reference\Properties\
 

namerh a écrit :

parce que je ne l'ai trouvé qu'en Jscript :(


Oulalalalala, n'oublie pas que JScript ==== JavaScript [:le kneu] JScript est l'implémentation de Microsoft de l'ecmascript (spec ecma-262), au même titre que Javascript 1.xxx (de gecko)

n°1365229
namerh
Posté le 12-05-2006 à 15:47:35  profilanswer
 

FlorentG a écrit :

Euh... T'es sûr que tu regarde bien ? Parce moi dans la MSDN 2003, offsetWidth y apparaît très bien :( Dans MDSN Library\Web Development\HTML and Dynamic HTML\SDK Documentation\Reference\Properties\


dans l'environnement intégré de Visual Studio je vais dans le menu help>index>je tape le mot clé recherché et ça ne trouve rien pour offsetWidth (meme sans filtre!)
 

FlorentG a écrit :


Oulalalalala, n'oublie pas que JScript ==== JavaScript [:le kneu] JScript est l'implémentation de Microsoft de l'ecmascript (spec ecma-262), au même titre que Javascript 1.xxx (de gecko)

euh en français ça veut dire quoi stp?  n'oubliez pas qu'un jour vous avez été débutant aussi

n°1365230
FlorentG
Unité de Masse
Posté le 12-05-2006 à 15:47:37  profilanswer
 

Ca veut dire que JScript et Javascript, c'est la même chose :) C'est comme 407 et Laguna, les deux roulent sur la route, ont 4 roues, et roulent à l'essence :D

n°1365245
namerh
Posté le 12-05-2006 à 15:54:18  profilanswer
 

FlorentG a écrit :

Ca veut dire que JScript et Javascript, c'est la même chose :) C'est comme 407 et Laguna, les deux roulent sur la route, ont 4 roues, et roulent à l'essence :D


peuvent pas donner le meme nom alors? c'est vrai rien que lorsqu'on doit choisir le language ds une balise script on a le choix entre autre entre javascript et jscript (ça laisse supposer que c'est différent :( )

n°1365252
namerh
Posté le 12-05-2006 à 15:58:26  profilanswer
 

anapajari a écrit :

Ok je comprends mieux pourquoi tu trouvais le script "lourd à gérer"... :o

 euh 20 lignes juste pour récupérer la width d'un objet, oui je trouve que c'est un peu se compliquer la vie.. je préfère utiliser un seul mot-clé à la place, en l'occurence ce fameux offsetWidth ;)
mais ton code m'a intéressé car je ne savais pas qu'on pouvait accéder aux CSS de cette façon.
un peu d'indulgence quoi

n°1365258
FlorentG
Unité de Masse
Posté le 12-05-2006 à 16:01:47  profilanswer
 

namerh a écrit :

peuvent pas donner le meme nom alors? c'est vrai rien que lorsqu'on doit choisir le language ds une balise script on a le choix entre autre entre javascript et jscript (ça laisse supposer que c'est différent :( )


C'est totalement marketing. Pour la balise, le mieux est de mettre :

<script type="text/javascript">


Ca met tout le monde à peu près d'accord, tout en jartant les toutes vieilles bouzes sur lesquelles le script ne marchera de toute manière pas :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  problème de Style: véritable casse-tete! Help

 

Sujets relatifs
Probleme liens pages php et repertoire...Problème de perte de variable publique d'un formulaire au chargement d
problème de lecture d'un fichier en cobol[JavaScript] Problème avec un cookie
Problème de bouton radio [SVG] probleme dessin d'images SVG avec Batik
Problème récupération date[mysql] Problème de jointure [résolu merci antho1983]
problème changement de page a cause d'un comboboxenorme probleme excel
Plus de sujets relatifs à : problème de Style: véritable casse-tete! Help


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR