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 :

Supprimer affichage ligne d'un formulaire si date supérieure à aujourd'hui


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut Supprimer affichage ligne d'un formulaire si date supérieure à aujourd'hui
    Bonjour,

    J'ai essayé de créer une fonction qui me permet de ne pas afficher les lignes d'un formulaire si la date d'une colonne est supérieure à la date d'aujourd'hui mais cela ne fonctionne pas.
    Merci de votre aide

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    window.addEventListener("load",function()
                              {
       // Variable de la date du jour
       var date = new Date();
     
      // Appel de la collection des lignes de ta table;
     
        const lignes=document.querySelectorAll("tr");
     
       // Les lignes ayant une date supérieure à aujourd'hui napparaissent pas;
     
         lignes.forEach(function(v){if(v.directoryColDate > date){v.style.display="None";}})
         },false)

    La page : https://champfrance.soinsenergie.fr/...u-liste-compet

    Merci de votre aide

    Marc G.

  2. #2
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    J'ai modifié le code mais cela ne marche pas mieux
    Code javascript : 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
     
      window.addEventListener("load",function()
                              {
      // Appel de la collection des lignes de ta table;
     
        const lignes=document.querySelectorAll("tr");
     
        // Variables de la date du jour et date competition
       var date = Date.now();
       var datecomp = document.querySelectorAll("directoryColDate");	
     
       // Les lignes ayant une date supérieure à aujourd'hui napparaissent pas;
     
        lignes.forEach(function(d){if(d.datecomp < date){d.style.display="None";}})
         },false)
     
      }

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 108
    Points : 44 921
    Points
    44 921
    Par défaut
    Bonjour,
    il faudrait que tu essaies de comprendre ce que tu veux faire et ce que tu fais.
    • Lecture de la valeur de la cellule, c'est une chaine, pas un objet Date ;
    • Conversion en objet Date ;
    • Comparaison des deux données qui sont de même type ;
    • Suppression de l'affichage suivant le cas.


    Voilà une façon de faire parmi d'autres.

    Au passage dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var datecomp = document.querySelectorAll("directoryColDate")
    le sélecteur est incorrect il manque un point pour référencer une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.querySelectorAll(".directoryColDate")
    PS : il serait peut-être bon de le faire côté serveur.

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    J'aurais gardé ton 1er code et fait:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lignes.forEach(function(d){
    	if(new Date(d.cells[0].textContent.split("/").reverse()) < new Date()){
    		d.style.display="none";
    	}
    })

  5. #5
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Voilà l'ensemble de mon code
    La première partie fonctionne bien(lignes contenant coupe de France colorées en violet), mais la partie que j'ai rajoutée ne fonctionne pas.
    Je pense qu'il y certaines subtilités de java que je n'ai pas encore comprises.
    De cette façon es ce que la seconde fonction est bien appelée ?
    Faut il donner un nouveau nom de fonction à la seconde ou je peux l'intégrer dans la première ?


    Code javascript : 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
     
    <script type="text/javascript">
     
      {
      window.addEventListener("load",function()
                              {
     
     
        // Appel de la collection des lignes de ta table;
     
        const lignes=document.querySelectorAll("tr");
     
        // Lignes qui contiennent coupe de France apparaissent en couleur;
     
        lignes.forEach(function(v){if(v.textContent.search("Manche de Coupe de France")!=-1){v.style.color="#9637a5",v.style.fontWeight="bold";}})
    },false)
     
     
      }                   
     
      {  
     
      //fonction pas d'afichage si date passée;                       
      // Appel de la collection des lignes de ta table;
     
       const lignes=document.querySelectorAll("tr");
     
        // Variables de la date du jour;
       var date=Date.now();
     
       // Les lignes ayant une date supérieure à aujourd'hui napparaissent pas;
     
       lignes.forEach(function(d){
    	if(new Date(d.cells[0].textContent.split("/").reverse()) < new Date()){
    		d.style.display="none";}})
     
       }                                                  
     
    </script>

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Attention à ce que tu fais:

    ==> Que viennent faire ces accolades à la ligne 4 et à la ligne 37: enlève-les, elles n'ont pas de sens?
    ==> ne redéfinis pas const lignes à la ligne 26: ça provoque forcément une erreur (console);
    ==> déplace ta ligne 16 en fin de script: tu refermes le listener alors que le reste est également à prendre en compte au chargement de la page!
    Et tout marchera.
    ==> Au cas où, ta ligne 29 ne sert à rien: tu n'utilises pas la variable...

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    ah tiens, tu peux aussi remplacer l'ensemble par ça (après un dernier scan...):

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    window.addEventListener("load",function(){
    	const lignes=document.querySelectorAll("tr");
     
    	lignes.forEach(function(v){
    		if(v.textContent.indexOf("Manche de Coupe de France")!=-1){
    			v.style.color="#9637a5",
    			v.style.fontWeight="bold";
    		};
    		if(new Date(v.cells[0].textContent.split("/").reverse()) < new Date()){
    			v.style.display="none";
    		}
    	})
    },false)

  8. #8
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Merci beaucoup. Effectivement force de tâtonner je me perdais dans les accolades.

    Si j'ai bien compris l'argument cells[0] indique que la comparaison se fait sur la première cellule de la ligne et split permet de scinder la date et donc de faire une comparaison sans la transformer en millisecondes ?

  9. #9
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    pour cells[0], tu as compris;

    pour le reste, je précise:

    split().reverse() inverse le format jj/mm/aaaa en aaaa/mm/jj, ce qui te permet d'avoir une date valide pour javascript;

    Par ailleurs, pour être plus précis, il faut vérifier que la date du tableau ne correspond absolument pas à celle de l'instant; en effet, Date.now() ou new Date() vont renvoyer un timestamp précis correspondant au nombre d'heures, de minutes, de secondes et de millisecondes au moment où la page est chargée.
    Donc, il faut ajouter à la date du tableau 1000 * 60 * 60 * 24 et tester si la valeur totale est strictement différente de new Date();

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(Number(new Date(v.cells[0].textContent.split("/").reverse()))+ 8.64*Math.pow(10,7) < new Date()){
    	v.style.display="none";
    }

  10. #10
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Merci.
    Effectivement j'ai fait un test, si on ne rajoute pas le temps écoulé de la journée on se retrouve à faire disparaitre des lignes à la date du jour.

    J'en profite.
    Il y a une grosse différence entre ou .
    Si j'ai bien compris on peut utiliser new Date en fixant une date particulière alors que date.now est la date de l'instant de chargement de la page ?

    Marc G.

  11. #11
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Date() est un objet natif très (très très) complet alors que Date.now() n'est qu'une méthode statique;

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 108
    Points : 44 921
    Points
    44 921
    Par défaut
    Bonjour,
    J'en profite.
    Il y a une grosse différence entre
    (...)
    je vois que tu as lu attentivement le lien que je t'ai donné dans une autre de tes discussions
     
    Citation Envoyé par NoSmoking Voir le message
    peut-être devrais-tu commencer par regarder ce que tu peux faire avec un objet Date.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les lignes en fonction de la date d'aujourd'hui
    Par ghitarais dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 27/10/2023, 10h13
  2. [XL-2003] supprimer une ligne en fonction d'une date
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2010, 20h55
  3. [IP-2003] Validation de données : Date supérieure à aujourd'hui
    Par Romeoo dans le forum InfoPath
    Réponses: 2
    Dernier message: 06/07/2009, 11h05
  4. Supprimer des lignes sur un test de date
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2007, 17h37
  5. Supprimer une ligne dans un formulaire
    Par LAGARDETTE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/09/2006, 20h11

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