使用Javascript动态单击修改列表项

问题描述 投票:-1回答:2

我正在尝试在Javascript中创建一个基本的待办事项列表。我基本上没有这种语言的经验,所以我试图尽可能保持基本。我希望在用户点击它时更改列表项的外观(例如,在文本中有一个行标记)。我一直在使用其他一些JavaScript的源代码,但由于某种原因它不能使用我的代码。

这是问题点。

<script>
var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
   if (ev.target.tagName === 'LI') {
   ev.target.classList.toggle('checked');
  }
}, false); 
</script>

<html>
<ul id = "toDoList">
    <li id = "checked">Do laundry</li>
    <li>Wash car</li>
</ul>
</html>

CSS:

.checked {
    text-decoration: line-through;
}

如果有人能帮助我解决这个问题,那就太棒了! (同样,从JQuery中明确指出,我对此一无所知。)

javascript html css list
2个回答
0
投票

您必须在加载元素后运行javascript代码,否则您将无法找到它并且代码将无法运行。

.checked {
    text-decoration: line-through;
}
<html>
<ul id = "toDoList">
    <li id = "checked">Do laundry</li>
    <li>Wash car</li>
</ul>
<script>
var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
   if (ev.target.tagName === 'LI') {
   ev.target.classList.toggle('checked');
  }
}, false); 
</script>
</html>

另一种可能性是仍然将代码置于顶部但是使其在页面加载window.onload之后运行 - 您分配的函数将在页面加载后运行。

.checked {
    text-decoration: line-through;
}
<html>
<script>
window.onload = function(){
  var list = document.querySelector('ul');
  list.addEventListener('click', function(ev) {
     if (ev.target.tagName === 'LI') {
     ev.target.classList.toggle('checked');
    }
  }, false); 
}
</script>
<ul id = "toDoList">
    <li id = "checked">Do laundry</li>
    <li>Wash car</li>
</ul>
</html>

0
投票

这是一个解决您的问题的代码。 但是,如果你想用JavaScript编写代码,我认为你应该学习JavaScript。 JS语言与其他类C语言(C,C ++,Java等)具有相似的语法,但是它的底层却非常不同。

代码:

<html>
    <body>
        <style>
            .checked {
                text-decoration: line-through;
            }
        </style>
        <ul>
            <li class="item">task 1</li>
            <li class="item">task 2</li>
        </ul>
        <script>
        (function()
        {
            var items = Array.from(document.getElementsByClassName("item"));
            items.forEach(function(item)
            {
                item.onclick = function()
                {
                    item.className += " checked";
                }
            });
        })();
        </script>
    </body>
<html>
© www.soinside.com 2019 - 2024. All rights reserved.