1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Borner le calendrier d'un champ Date

Discussion dans 'Webdev' créé par Fakirato, Fev 8, 2018.

  1. Fakirato

    Fakirato New Member
    WXG24 MEMBRE WX WXG 23 WXG 22 WXG 21

    Inscrit:
    Déc 30, 2017
    Messages:
    302
    J'aime reçus:
    816
    Bonjour,
    C'est un vieux problème auquel j'ai décidé de m'attaquer une fois pour toute, Estimant probablement que des plugins tierces peuvent s'en charger...

    Voilà donc un Champ Date : SAI_Date, dans lequel est incrusté un bouton Calendrier.
    Quand on clique sur ce bouton, un calendrier apparaît où l'utilisateur peut choisir une date qui va donner la valeur du champ.
    L'objectif est de pouvoir griser les cases de ce calendrier qui sont en dehors d'une plage de dates prédéfinies.

    Nous aurons le Chargement de la page (onload) :
    Code (Text):

    // Variables globales navigateur
    gsAC est une chaîne = "dwwSAISIEDATEEX_CAL"
    gsBC est une chaîne = SAI_Date..Alias
    gsBMini est une chaîne = "20171125"
    gsBMaxi est une chaîne = "20171231"
     
    Code (Text):

    // Initialisation du champ Date
    jsInitCal(gsAC)
    jsInitDateCal(gsBC)
     
    Avec :
    - gsAC l'alias du calendrier, à vérifier dans le code source d'une page
    - gsBC l'alias du champ Date, ce qui va permettre de retrouver son bouton
    - gsBMin et gsBMaxi les dates au format ISO qui sont les bornes de la plage souhaitée
    Code (Text):

    Initialisation générale avec jsInitCal(gsAC) :
    function jsInitCal(ac)
    {
    $('#'+ac).on("DOMSubtreeModified",function(){
    jsBorneCal();
    });
    }
     
    Qui va permettre d'agir à chaque changement qui intervient dans la DIV qui entoure le calendrier.

    Initialisation spécifique au champ date jsInitDateCal(gsBC) :
    Code (Text):

    function jsInitDateCal(bcal)
    {
    abtn = $("#tz"+bcal).find("a");
    oc = abtn.attr('onclick');
    oc += ";jsBorneCal();"
    abtn.attr('onclick',oc);
    }
     
    Qui va insérer un traitement qui sera déclenché sur le clic du bouton dans le champ date.

    Ce traitement c'est le bornage dans le calendrier jsBorneCal() :
    Code (Text):

    function jsBorneCal()
    {
    $("#"+gsAC+" a[href^='javascript']").each(function(){
    hrf = $(this).attr('href');
    if (isvalDateCal(hrf) == 0){
    $(this).attr('href', "#");
    $(this).find('.Normal-Fond').css("background-color","grey");
    $(this).find('.Normal').css("color","white");
    }
    });
    }
     
    Qui fait appelle à une procédure navigateur en WL (parce que c'est tout de même plus simple !):
    Code (Text):

    Procedure isvalDateCal(sOnclick est une chaîne)
    SI sOnclick ~= "" ALORS RENVOYER 1
    sOnclick = Remplace(Remplace(Remplace(ExtraitChaîne(sOnclick,2," "),"'",""),")",""),"}","")
    SI PAS DateValide(sOnclick) ALORS RENVOYER 1

    dDate est une Date = sOnclick
    dMini est une Date = gsBMini
    dMAxi est une Date = gsBMaxi

    SI dMini <= dDate <= dMAxi ALORS
    RENVOYER 1
    SINON
    RENVOYER 0
    FIN
     

    Et ça marche !

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!




    Quand vous avez plusieurs champs Date dans une page, il faut juste appeler jsInitDateCal pour chacun.

    Cadeau de fin d'année 2017 à la communauté webdev [​IMG]

    Bonne fêtes à tous !

    --
    Code par : René MALKA
     
    Tags:
    zeuslefou apprécie ceci.
  2. zeuslefou

    zeuslefou Member

    Inscrit:
    Fev 8, 2018
    Messages:
    17
    J'aime reçus:
    36
    Merci pour ce beau rappel et cadeau ^^
     

Partager cette page

Chargement...