javascript - CSS/JS Checked 复选框应该是 "line out"待办事项列表应用程序中的 <li> 元素

标签 javascript html css checkbox

我在 html/JS/CSS 中创建了一个经典的待办事项列表应用程序,其中我具有以下功能:

  • 用户输入他/她的任务
  • 然后在下面打印任务,同一行上有一个复选框
  • 任务也存储在带有时间戳的对象中。
  • 所有新任务都添加在旧任务之上。

如何仅使用 css 解决以下问题:

当用户选中复选框时,相应行上的任务应该被“划出”,以便清楚地表明它已完成。

我做了一个 jsfiddle,但我不能让它在那里运行,无论如何它在这里:https://jsfiddle.net/fm6cbuu9/2/

到目前为止我有什么:

JS:

var tasks = {}


function addTask(){
var task = document.getElementById("inn").value
var ol = document.getElementById("ol")
var li = document.createElement("li")
var d = new Date()
var box = document.createElement("input")
        box.type = "checkbox"
        box.id = "box"

li.appendChild(box)
li.appendChild(document.createTextNode(task))
ol.insertBefore(li, ol.childNodes[0])

tasks[d.getTime()] = task
console.log(tasks)

CSS:

input[type=checkbox] + li {
text-decoration: overline;

}

HTML:

<body>
<div id="container">
    <div id="inner">
        <h1> To Do List </h1>

        <form id="skjema">
        Enter Task: <input type="text" id="inn" required="true">
                    <button type="button" onclick="addTask()"> Submit Task       </button> <br>
        Count task: <input type="text" id="ut" disabled="true">
        </form>

        <ol id="ol">

        </ol>
    </div>
</div>

最佳答案

不是为任务名称创建文本节点,而是将其放在复选框的标签内。然后,您只需在 CSS 中定位选中框旁边的标签即可:

var tasks = {}

window.addTask = function(){
	var task = document.getElementById("inn").value;
	var ol = document.getElementById("ol");
	var li = document.createElement("li");
	var d = new Date();
	var taskId = d.getTime();
	var box = document.createElement("input"); 
		box.type = "checkbox";
		box.id = "box-" + taskId;
	var label = document.createElement("label");
		label.setAttribute("for", "box-" + taskId);
		label.innerHTML = task;

	li.appendChild(box);
	li.appendChild(label);
	ol.insertBefore(li, ol.childNodes[0]);
	
	tasks[taskId] = task;
	console.log(tasks);
}
#container {
	display: block;
	margin-right: auto;
	margin-left: auto;
	background-color: lightgray;
	border-radius: 10px;
	width: 800px;
	height: auto;
	z-index: 0;
	padding: 20px;
}

input[type=checkbox]:checked + label {
	text-decoration: line-through;
} 
	<title>To do list</title>

<body>
	<div id="container">
		<div id="inner">
			<h1> To Do List </h1>
			
			<form id="skjema">
			Enter Task:	<input type="text" id="inn" required="true">
						<button type="button" onclick="addTask()"> Submit Task </button> <br>
			Count task:	<input type="text" id="ut" disabled="true">
			</form>

			<ol id="ol">
			
			</ol>
		</div>
	</div>
</body>

关于javascript - CSS/JS Checked 复选框应该是 "line out"待办事项列表应用程序中的 <li> 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228152/

相关文章:

javascript - JQuery 在 IE 中不返回 div,但在 Firefox/Chrome/Safari 中却返回 div?

javascript - AngularJS 计数器计数到目标数

javascript - ES6 : class autoloading like PHP?

php - Html Dropdown 提交表单并保留选项保留选项值

html - 强制 HTML5 youtube 视频

html - 选择标签内的文本垂直未对齐

javascript - 如何等待一个函数完成后再继续?

html - 将窗口分成 4 个部分,但删除一张图片会更改布局。

jquery - 创建单元格的对 Angular 线边框

javascript - CSS 溢出 : scroll HTML 的滚动问题