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 :

Saisir un format minutes:secondes


Sujet :

JavaScript

  1. #1
    Membre du Club
    Saisir un format minutes:secondes
    Hello !!!

    Bon, après 3 h de recherche et d'essais, je ne m'en sors pas du tout ...

    Un champ input dans lequel je veux saisir une durée de titre, au format par exemple 03:45, en saisissant que les chiffres, sachant que chaque chiffre rentré pousse les précédents vers là gauche (un peu de la même façon que l'on saisi un montant si on fait un envoi d'argent paypal, ou bien quand on saisi un montant à facturer sur un TPE)
    En gros, au départ il n'y a rien dans le champs, mais si je tape "3" par exemple, je veux que ca affiche "00:03" , si ensuite je tape 5 puis 7, ca affiche "03:57".

    Un event sur le champ input en question :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    onkeyup="verif_srchduree(this);"


    Puis une fonction :
    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
    function verif_srchduree(champ)
      {
    	saisie = champ.value;
    	saisie = saisie.substr(-4);
    	longueur = saisie.length ;
    	longueurmanque = 4 - longueur ;
    	if ( longueurmanque > 0 ) {
    	for(x = 1; x < longueurmanque ; x++)
    	{
    		saisie = "0"+saisie;
    	}
    	}	
     
    	saisie = saisie.substr(-4);
    	secondes = saisie.substr(-2);
    	minutes = saisie.slice(0,-2);
    	saisieretour = minutes + ":" + secondes;
    	document.getElementById("returninfo").innerHTML = saisieretour;
    	champ.value = saisieretour;
      }


    2 problèmes avec ce code :
    Le premier, cosmétique, chaque saisie décale tout le monde dans le champ ( si par exemple j'ai déjà saisi 2 chiffres pour faire 00:12, le fait de saisir le 3ème chiffre, affiche 00:123) avant que le traitement soit effectué. Si je remplace par onkeyup par onkeydown, pas de décalage mais valeur incorrecte (manque un chiffre).
    Le deuxième, c'est que je n'arrive pas à prendre les les 2 chiffres pour les minutes et que le ":" se met n'importe où et 2 fois ( genre ":1:34")

    Bref, tout est n'importe quoi
    Et je n’ai pas encore abordé le "que des chiffres pris en compte" et aussi le "maxi 59 minutes, et aussi 59 secondes".

    Merkouin à qui pourra m'apporter un coup de palme
    Couin
    Retrouvez-moi tous les dimanches à 22H pour une heure de mix en live tout au vinyle sur eurodance90.fr

  2. #2
    Modérateur

    Bonjour,
    pourquoi ne pas utiliser un <input type="time"> ?

    Sinon un truc simple à perfectionner ...
    a partir du HTML suivant :
    Code html :Sélectionner tout -Visualiser dans une fenêtre à part
    <input type="text" oninput="saisieTime(this)" value="00:00">

    on pourrait avoir une fonction du type de :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function saisieTime(obj) {
      // on ne garde que les chiffres
      let val = obj.value.replace(/\D/g, "");
      // ajout des 0 devant
      val = ("0000" + val).slice(-4);
      // récup. pour formatage de la sortie hh:mm
      // TODO: faire des vérifications d'usage plus sérieuses avant injection
      let h = parseInt(val.slice(0, 2), 10) % 24;
      let m = parseInt(val.slice(-2), 10) % 60;
      // injection valeur formatée
      obj.value = ("00" + h).slice(-2) + ":" + ("00" + m).slice(-2);
    }

  3. #3
    Membre du Club
    Hello,

    Impeccable ca me retire une bonne épine de la palme
    Merci !

    j'ai juste modifié h en m et m en s, et
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    let m = parseInt(val.slice(0, 2), 10);
    let s = parseInt(val.slice(-2), 10);

    car en fait je ne pouvais pas saisi par exemple 6 minutes (le fait de taper 60 passait à 00).

    A la limite, ce n'est pas très grave vu que dans le traitement php je converti les minutes en secondes et j'ajoute les secondes.

    A plouploutch'
    Retrouvez-moi tous les dimanches à 22H pour une heure de mix en live tout au vinyle sur eurodance90.fr