问:我收到“未捕获的TypeError:无法读取null的属性'children'”,似乎找不到我错了,我检查了错误发生的位置,但似乎无法修复。谁能指出我所缺少的吗?
//问题:用户互动无法提供理想的结果。
//解决方案:添加交互性,以便用户可以管理日常任务。
var taskInput = document 。getElementById (“ new-task” ); // new-task var addButton = document 。getElementsByTagName (“ button” )[ 0 ]; //第一个按钮var incompleteTasksHolder = document 。getElementById (“ incomplete-task” ); //不完整的任务VAR completedTaskHolder =
文件。getElementById (“ completed-task” ); // completed-task
//添加新任务var addTask = function (){ console 。日志(“添加任务...” );//当按下按钮时//使用#new-task中的文本创建新的列表项:// input(复选框)// label // input(文本)// button.edit //button.delete //每个元素,都需要修改并附加}} //编辑现有任务var editTask = function (){ console
。日志(“编辑任务...” );
//当按下编辑按钮时//如果参数是.editMode //从.editMode切换//标签文本成为输入的值// else //切换到.editMode //输入值成为标签文本// Toggle父级上的.editMode } //删除现有任务var deleteTask = function (){ console 。日志(“删除任务...” );//当按下Delete按钮时//从ul中删除父列表项} //将任务标记为完成var
taskCompleted = function (){
控制台。日志(“任务完成...” );// //选中此复选框//将任务列表项追加到#completed-tasks } //将任务标记为未完成var taskIncomplete = function (){ console 。日志(“任务未完成...” );///如果未选中此复选框,//将任务列表项追加到#incomplete-tasks } var bindTaskEvents = function (taskListItem ,checkBoxEventHandler ){
控制台。日志(“绑定列表项事件” );
//选择taskListItem的子对象var checkBox = taskListItem 。querySelector (“ input [type = checkbox]” ); var editButton = taskListItem 。querySelector (“ button.edit” ); var deleteButton = taskListItem 。querySelector (“ button.delete” ); //绑定editTask以编辑按钮editButton 。onclick = editTask ;
//绑定deleteTask删除按钮
deleteButton 。onclick = deleteTask ; //将checkBoxEventHandler绑定到复选框checkBox 。onchange = checkBoxEventHandler ; } //将点击处理程序设置为addTask函数addButton 。onclick = addTask ; //周期超过incompleteTaskHolder UL列表项为(VAR我= 0 ;我< incompleteTasksHolder 。孩子。长度;我++ ){
//事件绑定到列表项的儿童(taskCompleted)
bindTaskEvents (incompleteTasksHolder 。孩子[我],taskCompleted ); } //循环过incompleteTaskHolder UL列表项为(VAR我= 0 ;我< completedTaskHolderTasksHolder 。孩子。长度;我++ ){ //绑定事件清单项目的孩子(taskIncomplete)bindTaskEvents (completedTaskHolder 。孩子[我]
taskIncompleted );
}
<!DOCTYPE HTML>
< HTML >
<头部> <标题>待办事项应用</标题> <链路HREF = 'http://fonts.googleapis.com/css?family=Lato:300,400,700'相对= '样式表'类型= 'text / css' > < link rel = “ stylesheet” href = “ css / style.css” type = “ text / css” media = “屏幕” charset = “ utf-8”> </头>
<体>
< DIV类= “容器” > < p > <标签为= “新任务” >添加项目</标签> <输入ID = “新任务”类型= “文本” > <按钮>添加< /按钮> </ p > < h3 >待办事项</ h3 > < ul id = “不完整的任务” > <
li > <输入 类型= “复选框” > <标签>支付账单</标签> <输入 类型= “文本” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除< /按钮> </ li >
< li class = “ editMode” > <输入类型= “复选框” > <标签> 去购物</标签> <输入 类型= “文本” 值= “去购物” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除</按钮> </ li >
</ ul > < h3 >已完成</ h3 > < ul id = “已完成任务” >< li > <
输入 类型= “复选框”已 选中> <标签>请参阅Doctor </标签> <输入 类型= “文本” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除</按钮> </ li >
</ ul > </ div > <脚本类型= “text / javascript“ src =
“ js / app.js” > </脚本>
</ body > </ html >
答:您的问题似乎是您在此处定位未完成任务和完成任务:
var incompleteTasksHolder = document 。getElementById (“ incomplete-task” ); //不完整的任务
VAR completedTaskHolder = 文件。getElementById (“ completed-task” ); //完成的任务
但您在此处将其命名为incomplete-taskS和complete-taskS:
< ul id = “不完整的任务” >
< li > <输入类型= “复选框” > <标签>支付账单</标签> <输入类型= “文本” > <按钮类= “编辑” >编辑</按钮> <按钮类= “删除” >删除</按钮> </ li > <li class = “ editMode” > <
输入 类型= “复选框” > <标签>购物</标签> <输入 类型= “文本” 值= “购物” > <按钮 类= “编辑” >编辑</按钮> <按钮 类= “删除” >删除</按钮> </ li >
</ ul > < h3 >已完成</ h3 > < ul
id = “ completed-tasks” >
< li > <输入类型= “复选框”已选中> <标签>请参阅Doctor </标签> <输入类型= “文本” > <按钮类= “ edit” >编辑</按钮> <按钮类= “删除” >删除</按钮> </ li > </ ul >
因此,当您尝试绑定事件时,它会针对不存在的对象!
希望你觉得这个有用!