IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comportement différent d'un script sur un autre poste


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 110
    Points
    110
    Par défaut Comportement différent d'un script sur un autre poste
    Bonjour,
    j'ai un soucis avec un script Javascript.(ci-dessous) apellé depuis une page C#
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    function IsFloat(sChaine,nbMaxLeft,nbMaxRight){
    	var indexComa
    	var retour = true
    	if (sChaine.substring(0,1) == '-')
    		nbMaxLeft++
    	indexComa = sChaine.indexOf(',')
    	if (indexComa == -1){
    	  if ((sChaine.length > nbMaxLeft) || (isNaN(sChaine)))
    		retour = false
    	}
    	else if (nbMaxLeft < indexComa)
    		retour = false
    	else if (nbMaxRight < sChaine.length - indexComa -1)
    		retour = false
    	else if (isNaN(sChaine.substring(0,indexComa)))
    		retour = false
    	else if (isNaN(sChaine.substring(indexComa+1)))
    		retour = false
    	return retour
    }
     
    function SaisieRemiseA() {
        if (window.event.keyCode != '188' && window.event.keyCode != '110') {
            var sRemiseA,sCoefA;
            sRemiseA = JsTrim2(document.getElementById("<%=RemiseA.IDClient%>").value);
            if (window.event.keyCode == 8 && sRemiseA == 'ER') {
                sRemiseA = "";
                sCoefA = "";
            }
            else if (sRemiseA.length == 0){
                sRemiseA = "";
                sCoefA = "";
            }
            else if (IsFloat(sRemiseA,3,2) == false){
                sRemiseA = "ERR";
                sCoefA = "ERR";
            }
            else {
                sCoefA = MyRound((100 - parseFloat(sRemiseA.replace(',','.')))/100,4);
            }
            document.getElementById("<%=RemiseA.IDClient%>").value = JsTrim2(sRemiseA);
            document.getElementById("<%=CoefA.IDClient%>").value = JsTrim2(sCoefA);
        }
    }
     
    <table>
     
        <tr>
            <td>
                <asp:Label id="MyCaption" runat="server"></asp:Label>
            </td>
            <td>
                <asp:TextBox id="Numk" style="TEXT-ALIGN: right" runat="server" ></ASP:TextBox>
            </td>
            <%if (Unite != "") {%>
            <td>
                &nbsp;<asp:Label id="MyUnit" runat="server"></asp:Label>
            </td>
            <%}%>
            <td>
                <asp:CustomValidator id="NumValidator" CssClass="TexteRouge" OnServerValidate="ValideNumServeur" Display="Static" Text="*" EnableClientScript="true"  runat="server"/>
            </td>
        </tr>
    </table>
    Lorsque l'utilisateur saisi un nombre décimal, il peut taper par exemple '10,' mais lorsqu'il tape le premier chiffre après la virgule, la fonction détecte une erreur et affiche 'ERR'.
    Mais ce qui est vraiment étonnant, c'est que je n'arrive pas à reproduire ce pb sur un autre poste (portable ou fixe) que sur le portable de l'utilisateur. Il utilise la version 6 d'IE, execute bien les scripts javascript. Je ne comprene pas ce qui ce passe. Je ne sais si mon post est bien situé mais je suppose que le pb vient du javascript. En effet, cette utilisateur rencontre un autre pb avec un autre control (C#) qui permet de saisir une date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <table>
    	<tr>
    	    <td><asp:Label id="MyCaption" runat="server"/></td>
    		<td><asp:TextBox maxLength="2" size="2" id="jour" name="jour" runat="server"/></td>
    		<td>/</td>
    		<td><asp:TextBox maxLength="2" size="2" id="mois" name="mois" runat="server"/></td>
    		<td>/</td>
    		<td><asp:TextBox maxLength="4" size="4" id="annee" name="annee" onchange="this.value=sais_annee(this.value)" runat="server"/></td>
    	    <td><%if (!ReadOnly){%><a href="javascript:ShowCalendar<%=ClientID%>();" TABINDEX=-1 id="Show<%=ClientID%>" name="Show<%=ClientID%>"><img border="0" onmouseover="javascript:this.src='../images/down2.gif';" onmouseout="javascript:this.src='../images/down.gif';" src='../images/down.gif' WIDTH="14" HEIGHT="14"/></a><%}%></td>
    	    <td><asp:CustomValidator id="DateValidator" CssClass="TexteRouge" OnServerValidate="dateValideServeur" Display="Static" Text="*" EnableClientScript="true" runat="server"/></td>
    	</tr>
    </table>
    Normalement, quand l'utilisateur saisie 2 chiffres pour le jour, le focus passe sur le champ mois. Ce n'est pas le cas pour mon utilisateur.
    Voici le code javascript.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function sais_date(val,Champsuiv){
    	var touche = window.event.keyCode
    	if ((touche >=96 && touche <=105) || (window.event.shiftKey && touche >=48 && touche <=57))
    		if (val.length==2)
    			Champsuiv.focus()
    }
    Dans les 2 cas, c'est la fonction '.length' qui semble être en cause.
    Si qq1 à une idée, merci d'avance
    Bonne journée

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 649
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 649
    Points : 11 138
    Points
    11 138
    Par défaut
    bonjour,

    pas facile à comprendre ton code. On ne voit pas quand, ni comment les fonctions sont appelées. Je n'ai jamais fait d'asp, ceci explique sans doute cela

    Donc il me sera sans doute difficile de répondre clairement à ton problème. L'idéal serait d'avoir le code de la page côté client

    Pour ton premier code j'ai fais ceci :
    j'ai supprimé JSTrim2, MyRound a été remplacé par Math.round() et le id des éléments ont comme nom "CoefA" et "RemiseA" :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    <html>
    <head>
    <title></title>
     
     
    <script type="text/javascript">
    <!--
    function IsFloat(sChaine,nbMaxLeft,nbMaxRight){
    	var indexComa
    	var retour = true
    	if (sChaine.substring(0,1) == '-')
    		nbMaxLeft++
    	indexComa = sChaine.indexOf(',')
    	if (indexComa == -1)
        {
    	  if ((sChaine.length > nbMaxLeft) || (isNaN(sChaine)))
    		retour = false
    	}
    	else if (nbMaxLeft < indexComa)
    		retour = false
    	else if (nbMaxRight < sChaine.length - indexComa -1)
    		retour = false
    	else if (isNaN(sChaine.substring(0,indexComa)))
    		retour = false
    	else if (isNaN(sChaine.substring(indexComa+1)))
    		retour = false
    	return retour
    }
     
    function SaisieRemiseA() {
        if (window.event.keyCode != 188 && window.event.keyCode != 110) 
        {
            var sRemiseA,sCoefA;
            sRemiseA = document.getElementById("remiseA").value;
            if (window.event.keyCode == 8 && sRemiseA == 'ER') 
            {
                sRemiseA = "";
                sCoefA = "";
            }
            else if (sRemiseA.length == 0)
            {
                sRemiseA = "";
                sCoefA = "";
            }
            else if (IsFloat(sRemiseA,3,2) == false)
            {
                sRemiseA = "ERR";
                sCoefA = "ERR";
            }
            else 
            {
                sCoefA = Math.round((100 - parseFloat(sRemiseA.replace(',','.')))/100,4);
            }
            document.getElementById("RemiseA").value = sRemiseA;
            document.getElementById("CoefA").value = sCoefA;
        }
    }
     
    //-->
    </script>
     
     
    </head>
     
    <body>
    <input type="text" value="" id="RemiseA" size="20" maxlength="10" onkeyup="SaisieRemiseA()">
    <input type="text" value="" id="CoefA" size="20" maxlength="10">
     
    </body>
     
    </html>
    si j'ai bien compris ton script, tu as une erreur si la partie entière est supérieure à 3 chiffres et la partie décimale supérieure à 2 chiffres. J'ai personnellement rencontré aucun problème. J'ai cependant deux remarques :
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
          if (window.event.keyCode != '188' && window.event.keyCode != '110')
      keyCode retourne des entiers pas des chaines de caractères, il faut enlever les guillemets (ils n'y sont pas sur les tests suivants) ;
    • window.event est propre à IE, ton script ne peux fonctionner sous Firefox par exemple.


    ---------------------------------------------------------------------------

    pour la seconde partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><asp:TextBox maxLength="4" size="4" id="annee" name="annee" onchange="this.value=sais_annee(this.value)" runat="server"/></td>
    la fonction javascript que tu nous donnes s'appelle sais_date() et non sais_annee().


    Dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><%if (!ReadOnly){%><a href="javascript:ShowCalendar<%=ClientID%>();" TABINDEX=-1 id="Show<%=ClientID%>" name="Show<%=ClientID%>"><img border="0" onmouseover="javascript:this.src='../images/down2.gif';" onmouseout="javascript:this.src='../images/down.gif';" src='../images/down.gif' WIDTH="14" HEIGHT="14"/></a><%}%></td>
    ce morceau me gêne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javascript:ShowCalendar<%=ClientID%>();
    si j'ai bien compris tu remplaces ClientId par sa valeur : pour plusieurs id tu auras donc autant de fonctions ShowCalendar que tu auras d'id. Ne vaut-il pas mieux écrire quelque chose dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javascript:ShowCalendar('<%=ClientID%>');
    (je ne connais pas l'asp, je te le rappelle, mais cette syntaxe me semble plus logique).

  3. #3
    Membre régulier Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 110
    Points
    110
    Par défaut
    Bonjour,
    merci de d'être penché sur mon pb.
    Donc il me sera sans doute difficile de répondre clairement à ton problème. L'idéal serait d'avoir le code de la page côté client
    Ok, j'ai mis en piece jointe les fichiers incréminé

    si j'ai bien compris ton script, tu as une erreur si la partie entière est supérieure à 3 chiffres et la partie décimale supérieure à 2 chiffres
    Non, mon pb enfin du moins celui de mon utilisateur (moi je ne rencontre pas ce pb), c'est lors de la saisie de '10,5' alors que le controle que j'ai crée est censé suporter les chiffres du type '99,99'

    keyCode retourne des entiers pas des chaines de caractères, il faut enlever les guillemets (ils n'y sont pas sur les tests suivants) ;
    ok je vais essayé sans mais il faut que je puisse revoir mon utiliseur et ca va pas êtr simple

    window.event est propre à IE, ton script ne peux fonctionner sous Firefox par exemple.
    C'est etonnant mais il n'a pas était prévu que l'application fonctionne sous autre chose que IE

    la fonction javascript que tu nous donnes s'appelle sais_date() et non sais_annee().
    Si, mais la partie de code que j'ai mis ne le montre pas. Voici donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    jour.Attributes.Add("OnKeyUp","sais_date(this.value,document.getElementById('"+mois.ClientID+"'))");
    mois.Attributes.Add("OnKeyUp","sais_date(this.value,document.getElementById('"+annee.ClientID+"'))");
    ce morceau me gêne :
    Code :

    javascript:ShowCalendar<%=ClientID%>();

    si j'ai bien compris tu remplaces ClientId par sa valeur : pour plusieurs id tu auras donc autant de fonctions ShowCalendar que tu auras d'id. Ne vaut-il pas mieux écrire quelque chose dans le genre :
    Code :

    javascript:ShowCalendar('<%=ClientID%>');

    (je ne connais pas l'asp, je te le rappelle, mais cette syntaxe me semble plus logique).
    Non, car lorsque qu'on utilise le controle dans une page aspx, la fonction ShowCalendar est ecrite litérallement dans la source. Et si on utilise 2 fois le même controle, il va ecrire 2 fois la procédure avec le même nom. Du coup, lors de l'exécution il va utiliser la premierè procédure qu'il va rencontrer dans les 2 cas. Or il ne s'agit pas de la même procédure. Donc il faut bien écrire 2 procédures avec un nom différent. Mais je ne pense pas que ceci soit le sujet de mon pb.
    Bonne journée

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 649
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 649
    Points : 11 138
    Points
    11 138
    Par défaut
    merci de me donner ton code, mais je ne vois pas ce que je peux en faire : ce sont des fichiers aspx et sql.

  5. #5
    Membre régulier Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 110
    Points
    110
    Par défaut
    bonsoir,
    le fichier sql s'est glissé la par erreur par contre les autres fichiers contiennent mes script javascript. Je n'ai pas de fichier .js
    Bonne journée

Discussions similaires

  1. [AJAX] Comportement différent d'une requête sur deux éléments
    Par Indyana dans le forum jQuery
    Réponses: 2
    Dernier message: 05/11/2013, 09h18
  2. Comportement différent en local et sur serveur
    Par CinePhil dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/03/2012, 15h41
  3. [Smarty] Afficher le module d'un script sur un autre, étant sur le méme serveur
    Par poupou19 dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 29/01/2011, 00h37
  4. Réponses: 7
    Dernier message: 17/06/2008, 11h35
  5. probleme d'installation sur d'autres postes
    Par VBkiller dans le forum Composants VCL
    Réponses: 4
    Dernier message: 18/09/2002, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo