シンプルな To Do リスト アプリを用意しました。To-do アイテムは、jQuery によってアイテムとして挿入され<li>
ます。それらがチェックされている場合、それらは から削除され#todolist
、 の先頭に追加され#donelist
ます。ユーザーが誤ってチェックオフした To Do 項目を置き換えさせたいので、要素の.on
ハンドラーですが、機能していません。#donelist .checkbox
私は恥ずかしいほど長い間、これについて困惑してきました。#donelist .checkbox
クリック ハンドラーをesで動作させるにはどうすればよいですか?
HTML:
<div id="topform">
<input type="text" id="task" placeholder=" New task...">
</div>
<ul id="todolist">
</ul>
<ul id="donelist">
</ul>
JS:
$('#todolist').on('click', '.checkbox', checkTask);
$('#donelist').on('click', '.checkbox', replaceTask);
$('input').keypress(function (e) {
if (e.which == 13) {
addTask(e);
}
});
function addTask(e) {
taskToAdd = $('#task').val();
var listItem = "<li><span class='todotask'>" + taskToAdd + "</span><div class='checkbox'></div></li>";
$('#todolist').prepend(listItem);
}
function checkTask() {
var listItem = $(this).parent();
listItem.remove();
$('#donelist').prepend(listItem);
}
function replaceTask() {
alert('hey buddy');
}
完全な CSS:
html,
body {
margin: 0;
padding: 0;
background-color: #313131;
font-family: 'Helvetica', sans-serif;
}
#task {
width: 98%;
margin: 5px auto 7px auto;
padding: 0;
display: block;
height: 45px;
border: none;
border-radius: 2px;
font-size: 25px;
background-color: #F7F7F7;
}
ul {
margin: 0 auto 0 auto;
padding: 0;
width: 98%;
}
li {
list-style-type: none;
padding: 0;
margin: 5px auto 0 auto;
width: 100%;
height: 45px;
line-height: 45px;
position: relative;
font-size: 25px;
border-radius: 2px;
background-color: #F7F7F7;
}
#donelist li {
opacity: .5;
text-decoration: line-through;
}
.todotask {
margin-left: 7px;
}
.checkbox {
height: 31px;
width: 31px;
border-radius: 2px;
background-color: #C1C1C1;
position: absolute;
right: 7px;
top: 7px;
}
checkTask()
それは本当に私を混乱させるものです。ユーザーが動的に挿入された要素 (によって挿入された a内の a ) をcheckTask()
クリックすると呼び出されます。同様に起動しないのはなぜですか?div
li
addTask()
replaceTask()