Javascript 填充字段给出未定义函数错误

标签 javascript

我正在创建一个待办事项应用程序。它由 3 个任务组成,状态默认设置为 false。这些字段是使用 Javascript 填充的。

当单选按钮被选中时,它应该运行completeTask()函数。但它给了我未定义的函数错误。请帮忙!

let todoApp = (() => {
	const container = document.getElementById('todoLister');
	const todoList = [
		{
			task: 'Get Up',
			status: false
		},
		{
			task: 'Eat stuff',
			status: false
		},		
		{
			task: 'Goto College',
			status: false
		}
	];

	todoList.forEach((el, id) => {
		const label = document.createElement('label');
		const radio = document.createElement('input');
		const br = document.createElement('br');

		if(el.status)
			label.innerText = el.task+'- Done Successfully';
		else
			label.innerText = el.task+'- Not Done';
		
		label.setAttribute('for', el.task);
		radio.value = id;
		radio.setAttribute('type', 'radio');
		radio.setAttribute('onchange', 'completeTask('+id+')');
		container.appendChild(radio);
		container.appendChild(label);
		container.appendChild(br);
	});

	let completeTask = (id) => {
		todoList[id].status = true;

		if(todoList[id].status)
			document.getElementsByTagName('label')[id].innerText = 'Done Successfully';
	}
})();
<div id="todoLister">
</div>

最佳答案

由于您的函数位于 todoApp 中,因此它无法在全局范围内使用。您需要将函数和数据移到函数之外,以便全局可见。

const todoList = [{
    task: 'Get Up',
    status: false
  },
  {
    task: 'Eat stuff',
    status: false
  },
  {
    task: 'Goto College',
    status: false
  }
];


let completeTask = (id) => {
  todoList[id].status = true;

  if (todoList[id].status)
    document.getElementsByTagName('label')[id].innerText = 'Done Successfully';
}

let todoApp = (() => {
  const container = document.getElementById('todoLister');


  todoList.forEach((el, id) => {
    const label = document.createElement('label');
    const radio = document.createElement('input');
    const br = document.createElement('br');

    if (el.status)
      label.innerText = el.task + '- Done Successfully';
    else
      label.innerText = el.task + '- Not Done';

    label.setAttribute('for', el.task);
    radio.value = id;
    radio.setAttribute('type', 'radio');
    radio.setAttribute('onchange', 'completeTask(' + id + ')');
    container.appendChild(radio);
    container.appendChild(label);
    container.appendChild(br);
  });


})();
<div id="todoLister">
</div>

关于Javascript 填充字段给出未定义函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50850040/

相关文章:

javascript - ImageMagick 的批量转换 Shell 脚本

javascript - 警告 - 全局 this 对象的危险使用

javascript - 如果 jinja2 中的字符串包含该单词,则突出显示该单词

javascript - 适合容器的完整日历和隐藏滚动

javascript - 到达顶部时隐藏元素

javascript - typescript 中的范围变量

javascript - 如何在粘贴 url 后显示 youtube 视频数据,就像 Facebook 的 Wall 表单一样?

JavaScript 切换问题

javascript - 为什么 Closure 在使用 function.apply 时不对参数进行类型检查?

javascript - 可以在sessionStorage中使用jquery吗?