gpt4 book ai didi

Javascript点击功能一次只选择第一个元素或所有元素

转载 作者:行者123 更新时间:2023-12-02 21:43:50 25 4
gpt4 key购买 nike

我制作了一个带有复选框的简单无序列表,并希望将带有删除线文本的类应用于该复选框所属的 li。我尝试过的方法要么仅适用于第一个元素,要么立即应用于所有元素。

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<h1>Todo List</h1>
<ul>
<li>
<input type="checkbox">
List Item 1
</li>
<li>
<input type="checkbox">
List Item 2
</li>
<li>
<input type="checkbox">
List Item 3
</li>
</ul>
</body>
</html>

Javascript(仅选择第一个):

document.querySelector("input").addEventListener("click", addStrike);

function addStrike() {
document.querySelector("li").classList.toggle("completed");
}

(一次选择全部,当使用此代码时,我的 html 中有 jquery CDN)

$("li").on("click", addStrike);

function addStrike() {
$("li").toggleClass("completed")
}

最佳答案

您需要选择所有复选框,循环遍历它们,然后附加事件。

function cbClicked (event) {
// reference the checkbox
var cb = event.target
// find it was checked
var isChecked = cb.checked
cb.closest("li") // find the parent li
.classList.toggle("done", isChecked) // toggle the class
}


// Select all the checkboxes
var checkboxes = document.querySelectorAll('ul input[type="checkbox"]')

// loop over all the checkboxes
checkboxes.forEach( function (cb) {
// attach the event listener to each one
cb.addEventListener("change", cbClicked)
})
.done {
text-decoration: line-through;
}
<ul>
<li>
<input type="checkbox">
List Item 1
</li>
<li>
<input type="checkbox">
List Item 2
</li>
<li>
<input type="checkbox">
List Item 3
</li>
</ul>

如果你想使用 jQuery,它是类似的,jQuery 只是为你做循环

function cbClicked (event) {
// reference the checkbox
var cb = this
var isChecked = this.checked
$(cb).closest("li") // find the parent li
.toggleClass("done", isChecked) // toggle the class
}


// Select all the checkboxes
var checkboxes = $('ul input[type="checkbox"]').on("change", cbClicked)
.done {
text-decoration: line-through;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>
<input type="checkbox">
List Item 1
</li>
<li>
<input type="checkbox">
List Item 2
</li>
<li>
<input type="checkbox">
List Item 3
</li>
</ul>

只需 CSS 即可完成

input:checked + label {
text-decoration: line-through;
}
<ul>
<li>
<input type="checkbox" id="cb1">
<label for="cb1">List Item 1</label>
</li>
<li>
<input type="checkbox" id="c2">
<label for="cb2">List Item 2</label>
</li>
<li>
<input type="checkbox" id="cb3">
<label for="cb3">List Item 3</label>
</li>
</ul>

关于Javascript点击功能一次只选择第一个元素或所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com