1
votes

Coincé dans une boucle else if en Javascript

Je fais un exercice pour une classe et nous créons une liste Todo.

Mon problème est que lorsque je tape mon Todo et que j'appuie sur Entrée, j'obtiens le message Enter new Todo code >, au lieu de Tâche ajoutée .

Il semble que je suis coincé dans cette boucle else if et elle ne passera pas à la prochaine autre if instruction.

var todos = ["Buy New Turtle"];

window.setTimeout(function() {

  var input = prompt("What would you like to do?");

  while(input !== "quit") {

    if(input === "list") {
      console.log("**********");
      todos.forEach(function(todo, i) {
        console.log(i + ": " + todo);
      })
      console.log("**********")
    }
    else if(input === "new") {
      var newTodo = prompt("Enter new todo");
      todos.push(newTodo);
      console.log("Added todo");
      }

    else if(input === "delete"){
      var index = prompt("Enter index of todo to delete");
      todos.splice(index, 1);
      }
  }
    input = prompt("What would you like to do?");

  console.log("OK, YOU QUIT THE APP");
}, 500);


1 commentaires

Vous ne vérifiez plus jamais l ' input (jusqu'à ce que le while soit sorti), donc le while boucle indéfiniment


3 Réponses :


2
votes

Vous devez placer la redéclaration de input dans la boucle while . Vérifiez également si input est véridique - de cette façon, si quelqu'un ferme la boîte de dialogue, cela ne plante pas.

var todos = ["Buy New Turtle"];

window.setTimeout(function() {

  var input = prompt("What would you like to do?");

  while (input !== "quit" && input) {

    if (input === "list") {
      console.log("**********");
      todos.forEach(function(todo, i) {
        console.log(i + ": " + todo);
      })
      console.log("**********")
    } else if (input === "new") {
      var newTodo = prompt("Enter new todo");
      todos.push(newTodo);
      console.log("Added todo");
    } else if (input === "delete") {
      var index = prompt("Enter index of todo to delete");
      todos.splice(index, 1);
    }

    input = prompt("What would you like to do?");
  }

  console.log("OK, YOU QUIT THE APP");
}, 500);


1 commentaires

Tu m'as battu, ça devrait être la réponse acceptée



1
votes

Votre ligne:

input = prompt ("Que voulez-vous faire?"); est en dehors de votre boucle while , donc à chaque fois que vous entrez un todo, la variable input a toujours la valeur "new".

Regardez l'extrait de code ci-joint pour les corrections:

var todos = ["Buy New Turtle"];

window.setTimeout(function() {

  var input = prompt("What would you like to do?");

  while(input !== "quit") {

    if(input === "list") {
      console.log("**********");
      todos.forEach(function(todo, i) {
        console.log(i + ": " + todo);
      })
      console.log("**********")
    }
    else if(input === "new") {
      var newTodo = prompt("Enter new todo");
      todos.push(newTodo);
      console.log("Added todo");
    }
    else if(input === "delete"){
      var index = prompt("Enter index of todo to delete");
      todos.splice(index, 1);
    }
    // this line was moved into the while loop  
    input = prompt("What would you like to do?");
  }
    
  console.log("OK, YOU QUIT THE APP");
}, 500);


0 commentaires

1
votes
var todos = ["Buy New Turtle"];
newTodo = [];

window.setTimeout(function() {

  var input = prompt("What would you like to do?");

  while(input !== "quit") {

    if(input === "list") {
      console.log("**********");
      todos.forEach(function(todo, i) {
        console.log(i + ": " + todo);
      })
      console.log("**********")
    }
    else if(input === "new") {
      var newTodo = prompt("Enter new todo");
      todos.push(newTodo);
      console.log("Added todo");
      }

    else if(input === "delete"){
      var index = prompt("Enter index of todo to delete");
      todos.splice(index, 1);
      }
    input = prompt("What would you like to do?");
  }


  console.log("OK, YOU QUIT THE APP");
}, 500);`enter code here`

0 commentaires