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 :

Saisir un format minutes:secondes


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut 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

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    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 très actif Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    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'

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/08/2015, 16h46
  2. [MySQL] Comment afficher le résultat de ma requête en format heure minutes seconde ?
    Par AmBZH dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2012, 09h15
  3. Format heure minute seconde
    Par momo70 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/06/2007, 10h41
  4. Réponses: 1
    Dernier message: 01/06/2006, 23h12
  5. Formater une durée sous la forme Heure:Minute:Seconde
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2004, 23h29

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