2017-09-13 1 views
1

Ceci est mon premier message et deuxième jour avec Javascript;). J'essaie de créer un formulaire simple, qui:Javascript - comptage simple

  1. Permet à l'utilisateur de mettre une lettre/lettre dans un champ de saisie.
  2. Que je veux l'envoyer à mon script et:
    a) vérifier si quelque chose a été donné sous une forme
    b) si l'utilisateur a mis un signe que je veux le mettre dans un tableau et compter le nombre de essaie
    c) si le nombre d'essais atteignent 10 Je veux arrêter le script

Mon script ne remeber pas le nombre d'essais. De plus, il enregistre les données dans un tableau mais une fois le script terminé, il efface tout (je mets un peu de console.log() dans le script, pour voir s'il fait quoi que ce soit). Il semble que mon nombre de variables ne se souvient pas du nombre d'essais :(.

Comment puis-je résoudre ce problème? - mais d'une manière simple de codage :) (Je ne veux pas faire beaucoup de changements dans mon code)

<script type= "text/javascript"> 

var given_letters = []; // create an empty array 

function givenLetter() { 
    var count = 0; 
    var max_count = 10; 
    var letter = document.getElementById('letter').value; 

    while (count < max_count) { 
     if (letter === "") { 
      alert("No letter given");   
      return false; 
     } else {    
      count++; 
      given_letters.unshift(letter); 
      console.log(letter); // returns letter 
      console.log(given_letters); // returns array with 1 element 
      console.log(count); // returns "1" 
      alert("OK"); 
      return true; 
     } 
    } 
    while (count === max_count) { 
     alert("Sorry. You exceeded the limit of tries."); 
     return false; 
    } 
}      
</script> 


// in BODY section 
    <div> 
     <form><p>Put your letter here: <input type="text" id="letter" size="5" required><button onclick="givenLetter();">Send</button></p></form> 
    </div> 
+3

'while (nombre === MAX_COUNT)' ... vous aurez une mauvaise surprise quand cette condition est remplie. –

+1

Cessez d'utiliser le tutoriel/la page que vous utilisez pour apprendre. C'est à partir de 2000. N'utilisez pas js inline ('onclick =" givenLetter(); '), attachez plutôt un eventListener – baao

+0

Merci, je vais vérifier;) - Je suppose que je devrais le changer en IF. préoccupation maintenant est la partie "else {" :( – minibi

Répondre

0

essayer. Depuis le bouton i dans la balise de formulaire, le comportement par défaut du bouton est submit. donc le formulaire sera soumis et rechargera la page. Donc, pour éviter ce comportement, nous utilisons event.preventDefault(); et comptons comme une variable globale.

var given_letters = []; // create an empty array 
 
var count = 0; 
 
    
 

 
function givenLetter() { 
 
    event.preventDefault(); //to prevent reloading the page. 
 
    var max_count = 10; 
 
    var letter = document.getElementById('letter').value; 
 

 
    while (count < max_count) { 
 
     if (letter === "") { 
 
      alert("No letter given");   
 
      return false; 
 
     } 
 
     else {    
 
      count++; 
 
      given_letters.unshift(letter); 
 
      console.log(letter); // returns letter 
 
      console.log(given_letters); // returns array with 1 element 
 
      console.log(count); // returns "1" 
 
      alert("OK"); 
 
      return true; 
 
     } 
 
    } 
 
    while (count === max_count) { 
 
     alert("Sorry. You exceeded the limit of tries."); 
 
     return false; 
 
    } 
 
}  
<div> 
 
      <form> 
 
      <p>Put your letter here: <input type="text" id="letter" size="5" required> 
 
      <button onclick="givenLetter();">Send</button></p></form> 
 
     </div>

+0

Est-ce votre sortie attendue? –

+0

Merci;). C'est exactement ce dont j'avais besoin: D. Maintenant - étape par étape - Je vais vérifier votre réponse et @ David Lee code, pour comprendre pourquoi cela fonctionne;). Merci à tous pour votre aide! – minibi

+0

J'ai fait appuyer sur une flèche vers le haut, mais il semble que ma "réputation" est trop faible – minibi

1

le comportement par défaut d'un bouton dans un formulaire doit soumettre le formulaire ... et recharger la page (tout à fait stupide, OMI). C'est pourquoi votre script ne semble se souvenir de rien. Mais il y a un moyen d'empêcher cela. Également, écrire var count = 0;en dehors de la fonction, sinon il est mis à 0 à chaque fois que la fonction est appelée.

var count = 0; 

function givenLetter(event) { 
    event.preventDefault(); 
    // .... 
+0

Il met également compte à 0 sur chaque clic du bouton – baao

+0

Oui, ça aussi, à première vue, je pensais que c'était compter les lettres.J'ai mis à jour ma réponse, merci –

+0

@baao au début mais la même chose mais ce n'est pas l'erreur –

2

Vous pouvez utiliser given_letters.length au lieu de count, moins de code et son la même valeur, vous devez utiliser e.preventDefault(); de sorte que le formulaire ne marche pas soumettre la forme encore, here est un exemple de travail, pour e.preventDefault(); vous travailler besoin envoyer l'événement dans le bouton, comme ceci:

<div> 
     <form>  
     <p>Put your letter here: <input type="text" id="letter" size="5" required> 
     <button onclick="givenLetter(event);">Send</button></p> 
     </form> 
    </div> 

JS mise à jour:

var given_letters = []; // create an empty array 
function givenLetter(e) { 
    e.preventDefault(); 
    var max_count = 10; 
    var letter = document.getElementById('letter').value; 

    while (given_letters.length <= max_count) { 
     if (letter === "") { 
      alert("No letter given");   
      return false; 
     } 
     else {    
      given_letters.unshift(letter); 
      console.log(letter); // returns letter 
      console.log(given_letters); // returns array with 1 element 
      console.log(given_letters.length);//here is your count already 
      alert("OK"); 
      return true; 
     } 
    } 
    while (given_letters.length === max_count) { 
     alert("Sorry. You exceeded the limit of tries."); 
     return false; 
    } 
}     
+0

je vous remercie pour votre aide;) – minibi