Я хочу выбрать и удалить 2 функции, но что-то не так, когда я нажимаю кнопку «Выбрать», запускается функция удаления, и я вижу значение NaN на консоли. Как я могу решить эту проблему?
var collect = document.getElementById('collect');
collect.addEventListener('change', onChange);
collect.addEventListener('click', onDelete);
function onChange(event) {
var changeButton = event.target;
i = parseInt(changeButton.dataset.select);
console.info(i);
}
function onDelete(event) {
var deleteButton = event.target;
i = parseInt(deleteButton.dataset.delete);
console.info(i);
}.card {
width: 300px;
height: 80px;
background-color: blue;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: start;
}<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Document</title>
<link rel = "stylesheet" href = "style.css">
</head>
<body>
<div id = "collect">
<div class = "card">
<button data-delete='1'>Delete</button>
CARD 1
<select name = "" id = "" data-select='1'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button data-delete='2'>Delete</button>
CARD 2
<select name = "" id = "" data-select='2'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button data-delete='3'>Delete</button>
CARD 3
<select name = "" id = "" data-select='3'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
</div>Дополнительный,
Второй вопрос: я до сих пор не знаю, как лучше удалить карту. Я использовал jquery $("button[data-delete='" + i + "']").parents('.card').remove();. Но вроде нехорошо :(. Не могли бы вы мне помочь?
Я новичок, я просто знаю небольшую функцию jquery, не могли бы вы что-нибудь предложить?
@ KenHoàng То, что вы написали, почти имеет смысл, однако начните с того, чего вы хотите достичь, а затем с того, что вы сделали. Трудно помочь, когда мы не знаем цели :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


$(".delet-btn").click(function(){
$(this).closest(".card").remove();
});.card {
width: 300px;
height: 80px;
background-color: blue;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: start;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Document</title>
<link rel = "stylesheet" href = "style.css">
</head>
<body>
<div id = "collect">
<div class = "card">
<button data-delete='1' class = "delet-btn">Delete</button>
CARD 1
<select name = "" id = "" data-select='1'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button data-delete='2' class = "delet-btn">Delete</button>
CARD 2
<select name = "" id = "" data-select='2'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button data-delete='3' class = "delet-btn">Delete</button>
CARD 3
<select name = "" id = "" data-select='3'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
</div>для вашего второго вопроса я использую jquery для удаления карты.
Щелчок на элементе управления select запускает событие click и запускает обработчик onDelete (поскольку он прослушивает событие click). Итак, вам нужно предотвратить обработку щелчков по элементу выбора в обработчике onDelete. Это может быть реализовано путем проверки типа элемента, на который был выполнен щелчок, с помощью свойства nodeName.
Для удаления карты можно использовать решение из темы Как удалить родительский элемент с помощью простого javascript. Итак, код результата будет следующим.
var collect = document.getElementById('collect');
collect.addEventListener('change', onChange);
collect.addEventListener('click', onDelete);
function onChange(event) {
var changeButton = event.target;
if (changeButton.nodeName !== 'SELECT')
return false;
i = parseInt(changeButton.dataset.select);
console.info(i);
}
function onDelete(event) {
var deleteButton = event.target;
if (deleteButton.nodeName !== 'BUTTON')
return false;
i = parseInt(deleteButton.dataset.delete);
console.info(i);
deleteButton.parentNode.parentNode.removeChild(deleteButton.parentNode);
}.card {
width: 300px;
height: 80px;
background-color: blue;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: start;
}<div id = "collect">
<div class = "card">
<button data-delete='1'>Delete</button> CARD 1
<select name = "" id = "" data-select='1'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button data-delete='2'>Delete</button> CARD 2
<select name = "" id = "" data-select='2'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button data-delete='3'>Delete</button> CARD 3
<select name = "" id = "" data-select='3'>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
</div>Также возможно разделение источников событий с помощью классов и решений из темы Собственный addEventListener с селектором вроде .on () в jQuery.
Удачи и удачного кодирования! ;)
В JavaScript есть МНОГО способов решить ту же проблему, я сделал простой фрагмент в Обычный JavaScript, чтобы решить обе проблемы, которые вы ...
function changeOption (e) {
alert("New Option is: " + e.target.value)
}.card {
width: 300px;
height: 80px;
background-color: blue;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: start;
}<div id = "collect">
<div class = "card">
<button onClick = "this.parentNode.parentNode.removeChild(this.parentNode);">Delete</button>
CARD 1
<select onChange = "changeOption(event)" name = "" id = "">
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button onClick = "this.parentNode.parentNode.removeChild(this.parentNode);">Delete</button>
CARD 2
<select onChange = "changeOption(event)" name = "" id = "">
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
<div class = "card">
<button onClick = "this.parentNode.parentNode.removeChild(this.parentNode);">Delete</button>
CARD 3
<select onChange = "changeOption(event)" name = "" id = "">
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
</div>
</div>Это было бы прекрасно.
Вы пробовали это с помощью jquery?