Удаление элементов на странице
Здравствуйте друзья программисты.
Задача проста, нужно удалить элементы по нажатию, пишу вот такой код. 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, время: 14:36. |