私はバニラJSで基本的なリストを作成していますが、ハンドバールを使用してHTMLを維持しています& JSを分離してください。HTMLとJSを分離して守るために苦労しています
私は削除メソッドに来るまですべてがうまくいっていた。私の削除ボタンは私のHTMLの中にあり、私のJSの中で作られていないので、配列から項目を選択して削除するのは難しいです。
私はそれらの周りをループする方法を見つけたと思ったが、この問題は、ページのロード時にボタンをつかそうとするので、ページのロード時に空の配列を返しますその時点で、行うべきではないボタンが追加されました。
私はまた、これに対処するaddメソッドの中にdeleteメソッドを置こうとしましたが、これもまた問題を提示しました。
単に、スプライスを使用してアレイから関連アイテムを削除する作業中の削除メソッドの例を教えてもらえますか?
乾杯
HTML
<input id="add-to-do-value" type="text" placeholder="Add to do">
<button id="add-to-do">Add</button>
<div id="to-do-app"></div>
<script type="text/javascript" src="js/handlebars.js"></script>
<script id="to-do-template" type="text/template">
<ul>
{{#this}}
<div>
<li id={{id}}>
{{value}}
<button class="delete-btn" id={{id}}>Delete</button>
</li>
</div>
{{/this}}
</ul>
</script>
<script type="text/javascript" src="js/app.js"></script>
JS
(function() {
// Data array to store to dos
var data = [];
// Cache dom
var toDoApp = document.getElementById('to-do-app');
var toDoTemplate = document.getElementById('to-do-template');
var addToDo = document.getElementById('add-to-do');
var addToDoValue = document.getElementById('add-to-do-value');
var toDoTemplate = Handlebars.compile(toDoTemplate.innerHTML);
// Render HTML
var render = function() {
toDoApp.innerHTML = toDoTemplate(data);
}
// Add to dos
var add = function() {
var toDoValue = addToDoValue.value;
if(toDoValue) {
var toDoObj = {
value: toDoValue,
id: Date.now(),
}
data.push(toDoObj);
}
render();
}
// Delete to dos
var deleteBtn = document.querySelectorAll('.delete-btn');
for(i=0; i<deleteBtn.length; i++) {
deleteBtn[i].addEventListener("click", function(){
for(j=0; j<data.length; j++) {
if(data[j].id == this.id) {
data.splice(data[j], 1);
render();
}
}
});
}
// Bind events
addToDo.addEventListener("click", add);
})();
あなたがページをチェックする必要があるかもしれません配列作成関数を実行する前にロードが完了しました – GavinBrelstaff
'var toDoTemplate'を2回宣言していることに注意してください。 – PeterMader
Iveはあなたの最後の質問ですでに良い答えを出していますか? –