复选框-在单击待办事项列表的复选框时划掉文本
Checkbox -cross out the text when clicking checkBox for a todo list
我一直在看一个关于如何在单击文本旁边的checkbox
时划掉文本的教程,但我的代码不起作用,尽管它与教程中的代码相同(工作得很好)
我已经看了我的代码很长时间了,但看不出哪里出了问题,也许这只是一个打字错误,我看不到…有人知道为什么吗?
这是JavaScript代码(只是相关部分)
function updatingItem() {
var cbId = this.id.replace("cb_", "");
var textItem = document.getElementById("item_" + cbId);
textItem.style.textDecoration = "line-through";
}
function addItem() {
totalItems++;
var entry = document.createElement("li");
var checkBox = document.createElement("input");
checkBox.type = "checkbox";
checkBox.id = "cb_" + totalItems;
checkBox.onclick = updatingItem;
var span = document.createElement("span");
span.id = "item_" + totalItems;
span.innerHtml = textItem;
var textItem = document.getElementById("textItem");
entry.innerText = textItem.value;
var location = document.getElementById("todoList");
entry.appendChild(checkBox);
entry.appendChild(span);
location.appendChild(entry);
}
主要问题是在实际获得值var textItem = document.getElementById("textItem");
之前设置了span.innerHtml = textItem;
但是嘿。。。
仅限CSS:
label{
display: block;
}
label input[type=checkbox]:checked + span{
text-decoration: line-through;
}
<label>
<input type="checkbox">
<span>Buy Coffee</span>
</label>
<label>
<input type="checkbox" checked>
<span>Ask question on SO</span>
</label>
<label>
<input type="checkbox">
<span>Drink coffee</span>
</label>
这里有一个简单得多的琐碎的not-quite-a-tutorial不言自明的JS代码:
var todoList = document.getElementById("todoList");
var itemText = document.getElementById("itemText");
var add = document.getElementById("add");
add.addEventListener("click", function(){
var text = itemText.value.trim();
// IF NO TEXT ENTERED - DO NOTHING
if(!text.length) return ;
// CREATE AND APPEND HTML
var item = "<li><label><input type='checkbox'> <span>"+ text+"</span></label></li>";
todoList.insertAdjacentHTML('beforeend', item);
// FINALLY CLEAR THE TEXT FROM OUR INPUT
itemText.value = "";
});
label{
display: block;
}
label input[type=checkbox]:checked + span{
text-decoration: line-through;
background:rgba(0,255,0, 0.2);
}
<ul id="todoList">
<li>
<label>
<input type="checkbox">
<span>Buy Coffee</span>
</label>
</li>
<li>
<label>
<input type="checkbox" checked>
<span>Ask question on SO</span>
</label>
</li>
<li>
<label>
<input type="checkbox">
<span>Drink coffee</span>
</label>
</li>
</ul>
<input id="itemText" type="text">
<button id="add">ADD TO LIST</button>
https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
一个小检查告诉我您的文本没有添加到span
,而是添加到条目本身
这是我对你的问题的复制
var totalItems = 0;
function updatingItem() {
var cbId = this.id.replace("cb_", "");
var textItem = document.getElementById("item_" + cbId);
textItem.style.textDecoration = "line-through";
}
function addItem() {
totalItems++;
var entry = document.createElement("li");
var checkBox = document.createElement("input");
checkBox.type = "checkbox";
checkBox.id = "cb_" + totalItems;
checkBox.onclick = updatingItem;
var span = document.createElement("span");
span.id = "item_" + totalItems;
span.innerHtml = textItem;
var textItem = document.getElementById("textItem");
entry.innerText = textItem.value; //<<<<<Problem is here
var location = document.getElementById("todoList");
entry.appendChild(checkBox);
entry.appendChild(span);
location.appendChild(entry);
}
<html>
<head>
</head>
<body>
<ol id="todoList">
</ol>
<input type="text" id="textItem" placeholder="blabla"/>
<button onclick="addItem()">add item</button>
</body>
</html>
修复问题的轻微修改
var totalItems = 0;
function updatingItem() {
var cbId = this.id.replace("cb_", "");
var textItem = document.getElementById("item_" + cbId);
textItem.style.textDecoration = "line-through";
}
function addItem() {
totalItems++;
var entry = document.createElement("li");
var checkBox = document.createElement("input");
checkBox.type = "checkbox";
checkBox.id = "cb_" + totalItems;
checkBox.onclick = updatingItem;
var span = document.createElement("span");
span.id = "item_" + totalItems;
//span.innerHtml = textItem; <<<<<Comment this out
var textItem = document.getElementById("textItem");
span.innerText = textItem.value; //<<<<<Changed entry to span
var location = document.getElementById("todoList");
entry.appendChild(checkBox);
entry.appendChild(span);
location.appendChild(entry);
}
<html>
<head>
</head>
<body>
<ol id="todoList">
</ol>
<input type="text" id="textItem" placeholder="blabla"/>
<button onclick="addItem()">add item</button>
</body>
</html>
相关文章:
- 复选框与文本内联-JS问题
- 根据文本值禁用复选框
- 使用javascript提交表单并从字段/单选框/复选框/文本区域获取数据
- Javascript选中/取消选中所有复选框并将值写入文本区域
- 获取文本框中所有选定复选框的值
- 动态选中文本区域中现有项目的复选框组
- 选中复选框时更改文本框值
- 单击每个表格行中的复选框时启用文本框
- jQuery表 - 如何根据选中的复选框在单元格中写入文本
- 在 AngularJs 中触发文本框的复选框
- 基于复选框 Jquery 更新文本框
- 根据复选框选择 jQuery 更新文本框
- 我无法禁用带有复选框的文本框
- 从选中的复选框中获取所有值,并将其放入文本区域
- 如何使用选中的复选框文本自动填充输入文本字段
- 如何隐藏复选框文本
- 改变输入的火灾功能;使用jQuery标记(复选框/文本框)
- 选中复选框文本不变
- 我怎么能得到一个复选框文本在<光>标记,并在jQuery中的另一个标签中显示
- 可能添加CSS到一些JS样式禁用复选框文本