Удаление элементов на странице
Здравствуйте друзья программисты.
Задача проста, нужно удалить элементы по нажатию, пишу вот такой код.
general.event_handler('click', '.btn_add_time', function(e){
var wrap = document.getElementById('time_wrapper'); //находим основной блок
var elem = document.createElement('div'); //создаем дочерний элемент div
elem.setAttribute("class", "time_list_on_edit"); //дочернему элементу добавляем класс
elem.innerHTML = '<span>Отбытие: <input type="time" name="departure[]" value="" /></span>\
<span>Прибытие: <input type="time" name="arrival[]" value="" /></span>'; //добавляем контент
var deletebtn = document.createElement('button'); //создаем элемент, по клику на который должен удаляться дочерний элемент elem
deletebtn.prototype = {
'deleteElem' : function(){ //записываем в прототип каждой кнопки функцию удаления
wrap.removeChild(elem); //тут все понятно думаю, удаление непосредственно
}
}
deletebtn.innerHTML = 'Удалить';
elem.appendChild(deletebtn); //добавляем кнопку удаленияв дочерний блок elem
general.on_event_handler('click', 'button', function(e){ //вешаем на кнопку удаления обработчик
deletebtn.prototype.deleteElem(); //вызываем функцию удаления при нажатии
});
wrap.appendChild(elem); //добавляем элементы на страницу.
});
Если создать 2 таких дочерних элемента, и попытаться удалить один из них удалятся оба. Вопрос как сделать чтобы удалялся только тот к которому относится кнопка удаления, по которой как раз нажали. Спасибо. |
feoalter7,
сделайте макет ... и обязательно лезть в prototype ? |
feoalter7,
В коде не разбирался, но одна ошибка точно есть: prototype назначается функции, а не объекту. |
:cray: код рабочий и должен удалять только 1 элемент
|
krutoy, и че? это же твой стиль. Почему не нравится?
|
Цитата:
|
Цитата:
Ты так вобще onclick'и в методы прототипа приписываешь и тебя это не парило, пока я не подсказал ) А когда подсказал, ты че сделал? Добавил блядь регулярку для фильтрации числовых ключей ))) Где-нибудь на проекте тебя бы за такую хуйню стулом по башке ебнули. Короче, ты не далеко ушел. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
danik.js,
Какой нахуй удобный объект, какую функцию, ты совсем ебу дался? Он пишет записываем в прототип каждой кнопки функцию удаления В какой нахуй прототип каждой кнопки он че записал, ну ка расскажи пацанам, посмеши еще чуток, клоун. |
Цитата:
Я не читал умных книжек, не изучал всякие там паттерны программирования и прочую хреноту. Мне даже бирка "профессор" бесит. Я просто вижу что ты пишешь говнокод. Не пойму только намеренно или нет. Судя по тому, что не всегда понимаешь последствия - у тебя получается это произвольно. |
Цитата:
А в коде он написал то, что я сказал. Какие-то вопросы? |
danik.js,
Я вижу, что у тебя мозги не созданы для программирования вообще. Независимо от того что ты там читаешь или не читаешь, ты не понимаешь, КАК_ЭТО_РАБОТАЕТ, вот в чем проблема. Не обязательно жеэс, а вообще. |
Цитата:
|
Цитата:
|
рони,
<div id="time_wrapper">
<div>Время:</div>
<div class="time_list_on_edit">
<span>Отбытие: <input type="time" name="departure[]" value="{$j.time_departure}" /></span>
<span>Прибытие: <input type="time" name="arrival[]" value="{$j.time_arrival}" /></span>
<button>Удалить</button>
</div>
<!-- Сюда добавляются собственно новые блоки -->
</div>
Макет такой. Удаляет оба дочерних блока. krutoy, благодарю за подсказку про функцию и прототип. по сути можно им не пользоваться. но не стоило разводить такое, если нечего по вопросу сказать, зачем же людей оскорблять. с опытом все придет. |
danik.js,
может ты знаешь где проблема? |
feoalter7,
макет в моём понимании ... естественно обьекта general тут нет ... добавьте сами минимально то что локализует и покажет проблему
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<input id="add" name="add" type="button" value="add">
<div id="time_wrapper"></div>
<script>
var button = document.getElementById("add")
button.addEventListener("click", addDiv, false);
function addDiv(e){
var wrap = document.getElementById('time_wrapper'); //находим основной блок
var elem = document.createElement('div'); //создаем дочерний элемент div
elem.setAttribute("class", "time_list_on_edit"); //дочернему элементу добавляем класс
elem.innerHTML = '<span>Отбытие: <input type="time" name="departure[]" value="" /></span>\
<span>Прибытие: <input type="time" name="arrival[]" value="" /></span>'; //добавляем контент
var deletebtn = document.createElement('button'); //создаем элемент, по клику на который должен удаляться дочерний элемент elem
deletebtn.prototype = {
'deleteElem' : function(){ //записываем в прототип каждой кнопки функцию удаления
wrap.removeChild(elem); //тут все понятно думаю, удаление непосредственно
}
}
deletebtn.innerHTML = 'Удалить';
elem.appendChild(deletebtn); //добавляем кнопку удаленияв дочерний блок elem
deletebtn.addEventListener('click', function(e){ //вешаем на кнопку удаления обработчик
deletebtn.prototype.deleteElem(); //вызываем функцию удаления при нажатии
}, false);
wrap.appendChild(elem); //добавляем элементы на страницу.
};
</script>
</body>
</html>
|
feoalter7,
21 строка навешивается множеественно раз на все кнопы -- нажатие на любую потом -- вызывает веер обработки |
рони,
Спасибо :victory: |
мысли вслух 'button' заменить на deletebtn в 21 строке
|
ага, я как раз полез в general добавлять навешивание события не только на селекторы, но и на объекты, по началу упустил этот момент. Спасибо! Решено.
|
feoalter7,
аргумент string вешаем по селектору иначе на сам обьект - ну это и так понятно :) |
| Часовой пояс GMT +3, время: 04:43. |