#javascript
Вопрос:
const lists = document.getElementsByClassName('task-list')[0];
const radios = document.getElementsByName('rgPrior');
function onClick()
{
for (let i = 0, length = radios.length; i < length; i )
{
if (radios[i].checked)
{
btn_selected_color = radios[i].value 'P';
break;
}
}
const task = document.getElementById('item').value;
// Add it to the HTML
addTodo(task, btn_selected_color);
// Save it to localStorage
let data = JSON.parse(localStorage.getItem('todo')) || [];
data.push([
task,
btn_selected_color
]);
localStorage.setItem('todo', JSON.stringify(data));
}
function addTodo(todo, priority)
{
let entry = document.createElement('li');
let close = document.createElement('button');
entry.className = priority;
close.className = 'close-btn';
close.innerText = 'X';
close.addEventListener('click', function(e)
{
// Delete from localstorage
let data = JSON.parse(localStorage.getItem('todo'));
let index = data.indexOf([
todo,
priority
]);
data.splice(index, 1);
localStorage.setItem('todo', JSON.stringify(data));
// Delete HTML
this.parentElement.remove();
});
entry.appendChild(close);
entry.appendChild(document.createTextNode(todo));
lists.appendChild(entry);
}
// When the page is loaded, get from localStorage
window.addEventListener('load', function()
{
const data = JSON.parse(localStorage.getItem('todo'));
data.forEach(function(task)
{
addTodo(...task);
});
});
// const items = [{
// value: 'Item 1',
// className: 'low',
// }, {
// value: 'Item 2',
// className: 'high',
// }, {
// value: 'Item 3',
// className: 'low',
// }, {
// value: 'Item 4',
// className: 'medium',
// }, {
// value: 'Item 5',
// className: 'medium',
// }];
//const ul = document.getElementById('filtered-list');
const button1 = document.getElementById('high-priority');
const button2 = document.getElementById('medium-priority');
const button3 = document.getElementById('low-priority');
const createListtask = function createListtask(filteredList) {
lists.innerHTML = '';
filteredList.map((task) => {
const li = document.createElement('li');
li.append(task.value);
li.className = task.className;
lists.append(li);
});
};
const click = function click(event) {
event.preventDefault();
const t = this;
const filtered = task.filter(task => task.className === t.priority);
createListtask(filtered);
}
button1.addEventListener('click', click.bind({ priority: 'high' }));
button2.addEventListener('click', click.bind({ priority: 'medium' }));
button3.addEventListener('click', click.bind({ priority: 'low' }));
createListtask(task);
.hiP {
background-color: red;
}
.medP {
background-color: yellow;
}
.lowP {
background-color: green;
}
.ch5 {
padding-left: 30px;
}
<form>
<label for="txtAdd">New thing to do:</label>
<input name="txtAdd" type="text" id="item" />
<input type="button" name="btnAdd" id="btnAdd" value="Add List" onClick="onClick()" />
</form>
<p>Set Priority</p>
<p>
<label><input type="radio" name="rgPrior" value="hi" id="rgPrior_0"/>High</label>
<br>
<label><input type="radio" name="rgPrior" value="med" id="rgPrior_1"/>Medium</label>
<br/>
<label><input type="radio" name="rgPrior" value="low" id="rgPrior_2"/>Low</label>
<br/>
</p>
<ul class="task-list" id="filtered-list"> </ul>
<br><br><br>
<!-- <ul></ul> -->
<p> select to get a specific task</p>
<button id="high-priority" type="button">High Priority</button>
<button id="medium-priority" type="button">Medium Priority</button>
<button id="low-priority" type="button">Low Priority</button>
Я создаю веб-страницу списка дел с использованием HTML/CSS/JavaScript. Я сделал это только для отображения контента, введенного пользователями с приоритетными базами (высокий/низкий/средний). Я не могу выполнить последний раздел (выберите, чтобы получить конкретную задачу).
Основная концепция заключается в том, что если пользователь нажимает на кнопки high/medium/low, он должен отображать только соответствующий список приоритетов. Если пользователь нажимает кнопку с высоким приоритетом, то отображаются только данные списка с высоким приоритетом.
Высокий приоритет (фон-красный), средний приоритет (фон-желтый), низкий приоритет (фон-зеленый). Пожалуйста, измените наш код, ниже вы можете увидеть мой код. Пожалуйста, вы можете мне помочь?
(Часть нашего кода объясняется только нашей командой по переполнению стека).
Ответ №1:
const lists = document.getElementsByClassName('task-list')[0];
const radios = document.getElementsByName('rgPrior');
function onClick() {
var radios = document.querySelector('input[name="rgPrior"]:checked');
if (radios != null) {
var btn_selected_color = radios.value 'P'
const task = document.getElementById('item').value;
addTodo(task, btn_selected_color);
let data = JSON.parse(localStorage.getItem('todo')) || [];
data.push([
task,
btn_selected_color
]);
localStorage.setItem('todo', JSON.stringify(data));
}
}
function addTodo(todo, priority) {
let entry = document.createElement('li');
let close = document.createElement('button');
entry.className = priority;
close.className = 'close-btn';
close.innerText = 'X';
close.addEventListener('click', function(e) {
// Delete from localstorage
let data = JSON.parse(localStorage.getItem('todo'));
let index = data.indexOf([
todo,
priority
]);
data.splice(index, 1);
localStorage.setItem('todo', JSON.stringify(data));
this.parentElement.remove();
});
entry.appendChild(close);
entry.appendChild(document.createTextNode(todo));
lists.appendChild(entry);
}
// When the page is loaded, get from localStorage
window.addEventListener('load', function() {
const data = JSON.parse(localStorage.getItem('todo'));
data.forEach(function(task) {
addTodo(...task);
});
});
const button1 = document.getElementById('high-priority');
const button2 = document.getElementById('medium-priority');
const button3 = document.getElementById('low-priority');
const createListtask = function createListtask(filteredList) {
lists.innerHTML = '';
filteredList.map((task) => {
const li = document.createElement('li');
li.append(task[0]); //Replace key name if you are passing JSON
li.className = task[1]; ////Replace key name if you are passing JSON
lists.append(li);
});
};
const click = function click(event) {
event.preventDefault();
const data = JSON.parse(localStorage.getItem('todo'));
//This data you can get either from localStorage or you can create your prefered way. And the filtering data[1] you can replace with key name if it is JSON
const filtered = data.filter(data => data[1] === this.priority);
createListtask(filtered);
}
button1.addEventListener('click', click.bind({
priority: 'hiP'
}));
button2.addEventListener('click', click.bind({
priority: 'medP'
}));
button3.addEventListener('click', click.bind({
priority: 'lowP'
}));
Я вижу ошибку Uncaught ReferenceError: task is not defined
в вашем коде ( createListtask(task);
внизу). Если это задача, которую вы уже разработали в своем коде, пожалуйста, сообщите мне тип переменной.
Вывод выглядит следующим образом