Return de fonctions en JS et portée des variables

Résolu/Fermé
Judeminilili - Modifié par Judeminilili le 16/07/2015 à 12:20
 Utilisateur anonyme - 16 juil. 2015 à 18:33
Bonjour tout le monde,

Je suis débutante en Javascript et après avoir regardé de nombreux tutos sur le net je n'arrive toujours pas à comprendre où est mon erreur ; je pense que la réponse doit être toute simple, et que ma question va vous paraître basique, mais voici mon code :

        
var now = new Date() ;

function minute () {

$("#form_date_time_minute").change(function(){
return this.value;
});

return now.getMinutes() ;
}


En fait, je voudrais que s'il y a un changement sur le form_date_time_minute (c'est un champ select), la fonction minute() retourne la nouvelle valeur ; et sinon, qu'elle retourne les minutes de l'heure actuelle.
Le problème étant que pour l'instant qu'il y ait un changement ou pas elle me retourne toujours le now.getMinutes , alors que je croyais que le return this.value arrêtait l'exécution de la fonction...

J'avais également pensé à un autre moyen pour faire ça, je ne sais pas si ça serait mieux : définir une variable au début de minute() puis lui affecter une valeur en fonction des cas, et retourner cette variable à la fin. Mais encore une fois j'ai eu un soucis avec cette technique car je ne comprends pas bien la portée des variables en JS...

Merci d'avance !

4 réponses

Salut,

si le span ne doit contenir que les minutes réel au chargement de la page et les informations de la liste si elle change tu peux faire ceci :

<body>

  <select>
   <option value="liste-1">1</option>
   <option value="liste-2">2</option>
   <option value="liste-3">3</option>
   <option value="liste-4">4</option>
   <option value="liste-5">5</option>
   <option value="liste-6">6</option>
  </select>

  <span id="minute" style="color:red;font-size: 2em"></span>

  <script>
  
   var d = document;

   // le span de résultat
   var span = d.getElementById('minute');

  // évenement sur le select
   d.getElementsByTagName('select')[0].onchange = function() {

    span.innerHTML = this.value; // resultat de la liste dans le span

   }

   span.innerHTML = new Date().getMinutes(); // au chargement de la page
   
  </script>
 </body>



si tu tiens à utiliser une fonction, tu peux faire par exemple ainsi :

<body>

  <select>
   <option value="liste-1">1</option>
   <option value="liste-2">2</option>
   <option value="liste-3">3</option>
   <option value="liste-4">4</option>
   <option value="liste-5">5</option>
   <option value="liste-6">6</option>
  </select>

  <span id="minute" style="color:red;font-size: 2em"></span>

  <script>
  
   var d = document;

   var span = d.getElementById('minute');

   d.getElementsByTagName('select')[0].onchange = function() {

    getMinute(this.value); // appel de la fonction avec la valeur de la liste
   }
   function getMinute(data = null) {
    
    // chargement de la page
    if (null === data)  return span.innerHTML = new Date().getMinutes();
    
    // appel de la liste
    else return span.innerHTML = data;
   }
   
   // chargement de la page
   getMinute();

  </script>
 </body>

׺°"~'"°º×]|I{*------» LÖBÖTÖ «------*}I|[׺°"~'"°º×
1
Salut,

comment appel tu ta fonction minute() ?

Il faut savoir que ton événement change ne pourrais fonctionner que durant l'exécution de la fonction minute.

et tu devrais utiliser :

return $(this).val();

je te fais un exemple..attends

׺°"~'"°º×]|I{*------» LÖBÖTÖ «------*}I|[׺°"~'"°º×
0
Salut, merci pour ta réponse !

En fait j'ai besoin de ce que retourne la fonction minute pour l'afficher ensuite dans une page html (dans un span dont l'id est minute) donc je l'appelle ainsi :
    document.getElementById("minute").innerHTML = minute() ;
0
Waw je suis vraiment désolée de ne pas avoir répondu plus tôt, j'étais tellement occupée à tester mon code que je n'ai pas vu les heures passer (il faut avouer en plus que comme je débute j'ai mis un peu de temps avant que ça fonctionne ^^).

Bref je ne sais même pas comment te remercier tellement le code fait exactement ce que je voulais (j'ai choisi la deuxième option pcq j'avais envie d'utiliser une fonction). Voici donc mon code final, peut-être qu'il pourra servir à quelqu'un :

 d.getElementById('form_date_time_minute').onchange = 
var d = document;

var spanMinute = d.getElementById('minute');
var spanHour = d.getElementById('hour');

function(){
getMinute(this.value) ;
}
function getMinute(data) {
if (null == data) {
minutes = new Date().getMinutes() ;
if (minutes<10) minutes = "0"+minutes ;
return spanMinute.innerHTML = minutes;
}
else {
if (data<10) data = "0"+data ;
return spanMinute.innerHTML = data;
}
}

d.getElementById('form_date_time_hour').onchange = function(){
getHour(this.value) ;
}
function getHour(data) {
if (null == data) {
hours = new Date().getHours() ;
if (hours<10) hours = "0"+hours ;
return spanHour.innerHTML = hours;
}
else {
if (data<10) data = "0"+data ;
return spanHour.innerHTML = data;
}
}



J'ai juste apporté quelques modifications :
- j'ai appelé les champs select par leurs ids respectifs
- j'ai enlevé le data=null qui empêchait le bon fonctionnement des conditions chez moi
- j'ai ajouté des petites conditions pour que les heures et les minutes s'affichent avec un 0 devant quand elles sont inférieures à 10 (je sais je suis un peu maniaque ^^)

Merci encore lobotoFix tu m'as sauvée sinon je pense que j'aurais pu galérer encore longtemps, car je n'aurais jamais pensé à faire ça !

Bonne soirée ! ;)
0
Utilisateur anonyme
16 juil. 2015 à 18:33
de rien bonne soirée :)
0