2016-11-15 93 views
0

我正在学习javaScript并开发一个todoList应用程序。我已经把所有东西放在一个名为todoList的对象中,然后首先有一个存储todoList任务的对象数组。每个对象都有两个属性,即(todo = text,status = boolean)。之后是一个名为showTasks的函数来显示todoList中的任务。在showTasks函数中有一个if语句来检查todoList是否为空。之后是for循环显示数组中的所有任务。另一个if语句在for循环之后显示任务的状态。 addTask函数用于在列表中添加新任务,只添加没有状态的任务的文本(默认状态为false)。 editTaskdeleteTask函数是非常明显的。最后一个名为toggleStatus的函数是切换一个任务的状态,它不工作,我不明白为什么。您正在创建一个新的task,那么这里改变其状态函数在javaScript中不工作

toggleStatus: function(count) { 
    var task = this.tasks[count]; 
    this.tasks[count].status = !task.status; 
    this.showTasks(); 
} 
+1

你是如何调用'toggleStatus'?您是否在Dev Tools控制台选项卡中遇到错误? –

+0

您可以请上传html以及检查toggleStatus函数被调用的位置 – GraveyardQueen

+0

我至今尚未创建任何html文件。我在console.log中调用了todoList.toggleStatus,当我这样做时,它应该使用showTasks函数中提到的(X)来显示该特定任务。但它出现像“()任务1” –

回答

0

你在for循环if声明有一个错字:d

这是很好的语法:

if (this.tasks[i].status) { 

通过我会的方式像这样写道,原型更好,因为你的对象没有存储与声明的对象一样多的函数,并且创建速度更快;)请参阅JS - Why use Prototype?

function TodoList() { 
 
    // Storing tasks 
 
    this.tasks = []; 
 
} 
 

 

 
TodoList.prototype = { 
 
    // Displaying tasks 
 
    showTasks: function() { 
 
     if (this.tasks.length === 0) { 
 
      console.log("There's no tasks in the list."); 
 
     } else { 
 
      console.log("My Tasks:"); 
 
      for (var i = 0; i < this.tasks.length; i++) { 
 
       if (this.tasks[i].status) { 
 
        console.log("(X)", this.tasks[i].todo); 
 
       } else { 
 
        console.log("()", this.tasks[i].todo); 
 
       } 
 
      } 
 
     } 
 
    }, 
 

 
    // Adding a new task 
 
    addTask: function(task) { 
 
     this.tasks.push({ 
 
      todo: task, 
 
      status: false 
 
     }); 
 
     this.showTasks(); 
 
    }, 
 

 
    // Editing an existing task 
 
    editTask: function(count, task) { 
 
     this.tasks[count].todo = task; 
 
     this.showTasks(); 
 
    }, 
 

 
    // Deleting a task 
 
    deleteTask: function(count) { 
 
     this.tasks.splice(count, 1); 
 
     this.showTasks(); 
 
    }, 
 
    
 
    // Changing status 
 
    toggleStatus: function(count) { 
 
     var taskStatus = !this.tasks[count].status; 
 
     this.tasks[count].status = taskStatus; 
 
     this.showTasks(); 
 
    } 
 
}; 
 

 
var t = new TodoList(); 
 
t.addTask("yowwww"); 
 
t.addTask("miaou"); 
 
t.editTask(1, "miawwwwwou"); 
 
t.toggleStatus(0)

+0

我需要todoList在一个对象中,但你把它变成了一个函数?这是让我的代码工作的唯一方法吗? –

+1

对不起,当我发现这个类型的时候,这是令人兴奋的:D –

+0

@WaqasArshi你的语法仍然有效,选择Tigger获得相同的语法。我只是在我的回应中揭示另一种以更传统的方式申报班级的方式。 –

0

试试这个在this.tasks像这样:

toggleStatus: function(count) { 
    this.tasks[count].status = !this.tasks[count].status; 
    this.showTasks(); 
} 

编辑:

如发现由帕特里克·费雷拉。您还需要从改变showTasks

if (this.tasks.status === true) { 

要:

if (this.tasks[i].status === true) { 
+0

这将是'this.tasks [count] .status =!task.status;' – madhur

+0

@madhur,很好,赶上! – ppovoski

0

toggleStatus: function(count) { 
    var task = this.tasks[count]; 
    task.status = !task.status; 
    this.showTasks(); 
} 

你需要做的是改变存储task的状态

var todoList = { 

// Storing tasks 
tasks: [], 

// Displaying tasks 
showTasks: function() { 
    if (this.tasks.length === 0) { 
     console.log("There's no tasks in the list."); 
    } else { 
     console.log("My Tasks:"); 
     for (var i = 0; i < this.tasks.length; i++) { 
      if (this.tasks.status === true) { 
       console.log("(X)", this.tasks[i].todo); 
      } else { 
       console.log("()", this.tasks[i].todo); 
      } 
     } 
    } 
}, 

// Adding a new task 
addTask: function(task) { 
    this.tasks.push({ 
     todo: task, 
     status: false 
    }); 
    this.showTasks(); 
}, 

// Editing an existing task 
editTask: function(count,task) { 
    this.tasks[count].todo = task; 
    this.showTasks(); 
}, 

// Deleting a task 
deleteTask: function(count) { 
    this.tasks.splice(count,1); 
    this.showTasks(); 
}, 
// Changing status 
toggleStatus: function(count) { 
    var task = this.tasks[count]; 
    task.status = !task.status; 
    this.showTasks(); 
} 

}; 
+0

在你的解决方案中,'task'是未定义的。 – ppovoski

+0

是的,更正。 – Tigger

+0

比你的考虑,但它不工作。当我这样做(todoList.toggleStatus)时,它应该使用(X)打印该任务,如showTask函数中所述。 –

0

试试这个:我建议你改变countindex

toggleStatus: function(index) { 
    this.tasks[index].status = !this.tasks[index].status; 
    this.showTasks(); 
} 
0

没有通通过javascript参考,所以当你这样做时

var task = this.tasks[count]; 

它只是制作this.tasks [count]的另一个副本,并且您正在更新此副本,实际值没有更新。所以这是问题。解决的办法是

this.tasks[count].status = !this.tasks[count].status; 

希望它可以帮助