Bonjour =)

Je viens de 'finir' ce que je cherche à faire depuis un bon moment ! Malheureusement ça ne fonctionne que sous Firefox =( Et moi je voudrai que ça fonctionne sous IE !

Je vous explique :

J'ai une action 'onclick' qui appelle plusieurs fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<tr id="sect1" style="display:none">
        <!-- TVA -->
            <td class="RowHeader10" nowrap>&nbsp;&nbsp;&nbsp;<a onclick="javascript:changerSigne(1);afficherCacher('divcalculTOTAL_TVA');afficherCacher('divaffichageTOTAL_TVA');calcul_TVA_TOTAL(); aff_tva('-1', '<?php echo $sens; ?>')"><img name="image" src="img/plus.GIF"></a>&nbsp;TVA</td>
            <td class="Value10" nowrap><?php //echo number_format($achat->qte_total, 0, ',', ' '); ?></td>
            <td class="Value10" nowrap><?php //echo number_format($achat->montant_total, 2, ',', ' ').' &euro;'; ?></td>
            <td class="Value10" nowrap><?php //if(isset($achat->montant_total) and $achat->montant_total != 0) echo number_format(($achat->montant_total/$achat->montant_total)*100,3).'%'; ?></td>
        </tr>
Mon 'sect1' qui correspond à la TVA à lui même un display:none car c'est également un sous-menu; mais son affichage ne m'a pas poser de problème car il n'y avait aucun calcul nécessaire, j'ai donc utilisé des propriétés CSS.

En résumé j'ai : TOTAL -> TVA, Prix, Grossiste
Et dans chacun de ces sous-menus j'ai d'autres sous-menus, mais qui nécessitent, eux, des calculs (et c'est eux qui me font tout planter^^).

J'ai aussi, bien sûr, des div qui me servent à afficher mon résultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
<div id="divcalculTOTAL_TVA" style="display:none"></div>
<div id="divaffichageTOTAL_TVA" style="display:none"></div>
Ma fonction changerSigne() sert à changer mon bouton '+' en '-' et vis versa (c'est un tableau déroulant '+' '-').
Et ma fonction afficherCacher() affiche ou cache mon sous-menu.

JS :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
// affichage des sous-menus
function afficherCacher(element){
if(document.getElementById(element).style.display == 'none') document.getElementById(element).style.display = 'block'; //afficher
else if(document.getElementById(element).style.display == 'block') document.getElementById(element).style.display = 'none'; //cacher
}
 
// changement de signe
var tab_image = new Array(2);
for (var i=0; i< tab_image.length;i++)
tab_image[i]= new Image();
tab_image[0].src="img/plus.GIF";
tab_image[1].src="img/moins.GIF";
 
var n=0;
 
function changerSigne(indice)
{
n= ++n;
if(n == tab_image.length) n=0;
window.document.image[indice].src = tab_image[n].src;
}
Mes deux autres fonctions servent à calculer et remplir le tableau qui va s'afficher avec les valeurs calculées.

J'ai donc dans mon fichier JS :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
function getXhr(url) {
   if(window.XMLHttpRequest) // Firefox et autres
      xhr_object = new XMLHttpRequest();
   else if(window.ActiveXObject) // Internet Explorer
      xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   else                       // XMLHttpRequest non supporté par le navigateur
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
 
   xhr_object.open("GET", url, false);
   xhr_object.send(null);
   if(xhr_object.readyState == 4) {
      return(xhr_object.responseText);
   }
   else {
      return(false);
   }
}
 
var calcul=false;
 
function calcul_TVA_TOTAL() {
   if(calcul==false){
   calcul=true;
   retourJS = getXhr('page/ajax.php?action=calculTVATOTAL');
        // On se retrouve avec le résultat de la fonction PHP contenue dans ajax.php qui va se lancer si le test ($_GET['action'] == 'calculTVATotal') est vrai
   this.document.getElementById('divcalculTOTAL_TVA').innerHTML = retourJS;
   }
 
   else{}
}
 
function aff_tva($h, $sens) {
   retourJS2 = getXhr('page/ajax.php?action=aff_tva&h='+$h+'&sens='+$sens);
   this.document.getElementById('divaffichageTOTAL_TVA').innerHTML = retourJS2;
}
Et mon fichier ajax.php :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
<?php
 
    require_once('../connexion.php');
    require_once('../classes/cls_achat.php');
    
    @session_start();
        
    if(isset($_SESSION['debut_achat'])&&isset($_SESSION['fin_achat'])&&isset($_SESSION['achat'])){
        if(($_SESSION['debut_achat'] == $_SESSION['debut'])&&($_SESSION['fin_achat'] == $_SESSION['fin'])){
            $achat = $_SESSION['achat'];
        }
        else{
            $_SESSION['debut_achat'] = $_SESSION['debut'];
            $_SESSION['fin_achat'] = $_SESSION['fin'];
            $achat = new Achat($_SESSION['debut_achat'],$_SESSION['fin_achat']);
            $_SESSION['achat'] = $achat;
        }
    }
    else{
        $_SESSION['debut_achat'] = $_SESSION['debut'];
        $_SESSION['fin_achat'] = $_SESSION['fin'];
        $achat = new Achat($_SESSION['debut_achat'],$_SESSION['fin_achat']);
        $_SESSION['achat'] = $achat;    
    }
    
    if($_GET['action'] == 'calculTVATOTAL') { 
        $achat->calcul_TVA_TOTAL();    
    }
 
    if($_GET['action'] == 'aff_tva') {
        $achat->aff_tva($_GET['h'],$_GET['sens']);
    }  
    
    if($_GET['action'] == 'calculPrixTOTAL') { 
        echo 'calcul';
        $achat->calcul_Prix_TOTAL();    
    }
 
    if($_GET['action'] == 'aff_prix') {
        echo 'aff';
        $achat->aff_prix($_GET['h'],$_GET['sens']);
    }  
?>
Voilà, tout cela marche a peu près convenablement sous Firefox (je dis a peu près car les tableaux s'affichent sans prendre en compte la largeur de mon tableau initial, mais au moins ils s'affichent !),
mais sous IE j'ai un souci, toutes mes valeurs s'affichent au dessus de mon tableau déroulant '+' '-'
J'ai d'abord pensé à un problème dans les balises <tr> <td>, mais non, a priori elles sont toutes bien placées

HELP ME