Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Удаление элементов на странице (https://javascript.ru/forum/events/51811-udalenie-ehlementov-na-stranice.html)

feoalter7 20.11.2014 16:44

Удаление элементов на странице
 
Здравствуйте друзья программисты.
Задача проста, нужно удалить элементы по нажатию, пишу вот такой код.

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 таких дочерних элемента, и попытаться удалить один из них удалятся оба. Вопрос как сделать чтобы удалялся только тот к которому относится кнопка удаления, по которой как раз нажали.

Спасибо.

рони 20.11.2014 17:38

feoalter7,
сделайте макет ... и обязательно лезть в prototype ?

krutoy 20.11.2014 18:01

feoalter7,
В коде не разбирался, но одна ошибка точно есть: prototype назначается функции, а не объекту.

рони 20.11.2014 18:06

:cray: код рабочий и должен удалять только 1 элемент

danik.js 20.11.2014 18:31

krutoy, и че? это же твой стиль. Почему не нравится?

krutoy 20.11.2014 18:38

Цитата:

Сообщение от danik.js
krutoy, и че? это же твой стиль. Почему не нравится?

Какой нахуй стиль? Объект func.prototype===object.__proto__. Хуля толку, что он написал object.prototype={foo: bar}? Это все равно что object.foo={foo: bar}. Кто от него наследует? Где указано? какой смысл?

danik.js 20.11.2014 18:44

Цитата:

Сообщение от krutoy
Кто от него наследует? Где указано? какой смысл?

Так ведь работает же )

Ты так вобще onclick'и в методы прототипа приписываешь и тебя это не парило, пока я не подсказал )
А когда подсказал, ты че сделал? Добавил блядь регулярку для фильтрации числовых ключей ))) Где-нибудь на проекте тебя бы за такую хуйню стулом по башке ебнули.

Короче, ты не далеко ушел.

krutoy 20.11.2014 18:50

Цитата:

Сообщение от danik.js
в методы прототипа приписываешь и тебя это не парило, пока я не подсказал

Да я про это и без тебя знал. Просто на скорую руку сворганил. Да и это роль сыграет только в скорости одного прохода форин, так что, это вообще пустое.
Цитата:

Сообщение от danik.js
Так ведь работает же

Что работает? эта ветка кода не может работать, она не имеет ни малешйего смысла. Она может только "не мешать работать", не более того.

krutoy 20.11.2014 18:58

Цитата:

Сообщение от danik.js
Короче, ты не далеко ушел.

Сам факт этих нелепых мелких предъяв говорит лишь о том, что ты нахватался базвордов, а жс ты вообще не понимаешь. Таких секретуток щас в программировании большинство, да, это жестокая реальность. Но когда они пытаются рученки к стульям тянуть, обычно получают предварительно хуйца в жопу. Так что сиди на стуле ровно.

danik.js 20.11.2014 19:01

Цитата:

Сообщение от krutoy
эта ветка кода не может работать, она не имеет ни малешйего смысла

Ты туп? Он создал анонимную функцию. Записал ссылку на нее в удобный ему объект. Вызвал ее когда ему нужно. Ему так удобно, какие претензии?

krutoy 20.11.2014 19:06

danik.js,
Какой нахуй удобный объект, какую функцию, ты совсем ебу дался?
Он пишет

записываем в прототип каждой кнопки функцию удаления

В какой нахуй прототип каждой кнопки он че записал, ну ка расскажи пацанам, посмеши еще чуток, клоун.

danik.js 20.11.2014 19:08

Цитата:

Сообщение от krutoy
Таких секретуток щас в программировании большинство

Олень, я в сфере js только развлекаюсь. Я не работаю по этому профилю.
Я не читал умных книжек, не изучал всякие там паттерны программирования и прочую хреноту. Мне даже бирка "профессор" бесит.

Я просто вижу что ты пишешь говнокод. Не пойму только намеренно или нет. Судя по тому, что не всегда понимаешь последствия - у тебя получается это произвольно.

danik.js 20.11.2014 19:12

Цитата:

Сообщение от krutoy
Он пишет

Где пишет? Мне похуй че он в комментариях пишет. Я их не читал, мне не интересен тот словесный понос.

А в коде он написал то, что я сказал. Какие-то вопросы?

krutoy 20.11.2014 19:12

danik.js,
Я вижу, что у тебя мозги не созданы для программирования вообще. Независимо от того что ты там читаешь или не читаешь, ты не понимаешь, КАК_ЭТО_РАБОТАЕТ, вот в чем проблема. Не обязательно жеэс, а вообще.

krutoy 20.11.2014 19:15

Цитата:

Сообщение от danik.js
А в коде он написал то, что я сказал. Какие-то вопросы?

То есть, ты хочешь сказать, он что-то написал, имея целью написать что-то совершенно другое, и, чисто случайно, это почему-то заработало, по-причине стечения обстоятельств, и это значит, что он написал правильный код?

danik.js 20.11.2014 19:32

Цитата:

Сообщение от krutoy
ты хочешь сказать бла бла бла

Я уже сказал, че хотел - оно работает. Обсуждать тут больше нечего.

feoalter7 20.11.2014 19:39

рони,


<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,
благодарю за подсказку про функцию и прототип. по сути можно им не пользоваться. но не стоило разводить такое, если нечего по вопросу сказать, зачем же людей оскорблять. с опытом все придет.

feoalter7 20.11.2014 19:44

danik.js,
может ты знаешь где проблема?

рони 20.11.2014 19:45

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>

рони 20.11.2014 19:50

feoalter7,
21 строка навешивается множеественно раз на все кнопы -- нажатие на любую потом -- вызывает веер обработки

feoalter7 20.11.2014 19:52

рони,
Спасибо :victory:

рони 20.11.2014 19:52

мысли вслух 'button' заменить на deletebtn в 21 строке

feoalter7 20.11.2014 19:55

ага, я как раз полез в general добавлять навешивание события не только на селекторы, но и на объекты, по началу упустил этот момент. Спасибо! Решено.

рони 20.11.2014 20:04

feoalter7,
аргумент string вешаем по селектору иначе на сам обьект - ну это и так понятно :)


Часовой пояс GMT +3, время: 14:36.