Задать вопрос
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Как правильно написать код, что-бы он удалял именно это?

Всем привет!
Необходимо было написать код на JQuery, который по клику по форме будет вызывать функцию, которая создает всплывающее сообщение. Создал функцию, на первый взгляд - все гуд!
Функция с сообщением содержит в себе:
  • Создать родительский контейнер.
  • Поместить в родительски контейнер, контейнер с сообщением.
  • И если была команда (передается в параметрах к функции), спрятать сообщение и далее его удалить.


Проблема:
При клике по форме > единоразово вызывается сообщение (все гуд!) > кликаем еще раз - единоразово вызывает еще одно (все гуд!). НООО, когда подходит время удаления первого сообщения, скрипт удаляет сразу все, а не только первое. И по сути, это логично, ибо функция удаления относится к элементу, который имеет N класс, и соотвественно скрипт удаляет все на своем пути с таким классом.
Вопрос:
Как сделать 'адресное' удаление именно ЭТОГО сообщения. Так сказать, что-бы в момент клика, функция распространялась лишь на ЭТОТ созданный элемент и проводила все процедуры лишь с ним. Разумеется, при следующем клике - функция независимо будет работать именно для следующего элемента...

Код для наглядности:
function create_alert(alertParams) {

            // проверяем наличие родительского контейнера на странице
            var search = $('div#container-alert')[0];

            // если родительского контейнера нет, то создаем его
            if(!search) {
                $('body').append('<div id="container-alert"></div>');
            };

            // создаем контейнер под сообщение и размещаем его внутри родительского контейнера
            $('div#container-alert')
                .prepend('<div class="alert animated ' + alertParams['classAlert'] + ' ' + alertParams['showClass'] + '"></div>');

            // добавляем текст в сообщение
            $('div.alert').html(alertParams['text']);

            // при необходимости, скрываем сообщение по таймеру
            if(alertParams['hideClass']) {
                setTimeout(function () {
                    $('div.alert').removeClass(alertParams['showClass']);
                    $('div.alert').addClass(alertParams['hideClass']);

                    // при необходимости, удаляем сообщение спустя 3 секунды
                    if(alertParams['removeAlert']) {
                        setTimeout(function () {
                            $('div.alert').remove();
                        }, 3000);
                    };

                }, alertParams['hideTime']);
            };

        };

        var alertParams = {
            'text': 'Предупреждение системы',
            'classAlert': 'alert-danger',
            'showClass': 'zoomInRight',
            'hideTime': 3000,
            'hideClass': 'zoomOutRight',
            'removeAlert': 1
        };

        $('#login-form').on('click', function () {
            create_alert(alertParams);
        });
  • Вопрос задан
  • 182 просмотра
Подписаться 1 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
@DanSorokin
Full-stack developer at onvoya.com
function create_alert(alertParams, event) {

            // проверяем наличие родительского контейнера на странице
            var search = $('div#container-alert')[0];
            

            // если родительского контейнера нет, то создаем его
            if(!search) {
                $('body').append('<div id="container-alert"></div>');
                console.log('apppend');
            };
  
            var alert = $('<div class="alert animated ' + alertParams['classAlert'] + ' ' + alertParams['showClass'] + '"></div');

            // создаем контейнер под сообщение и размещаем его внутри родительского контейнера
            $('div#container-alert')
                .prepend(alert);

            // добавляем текст в сообщение
            alert.html(alertParams['text']);

            // при необходимости, скрываем сообщение по таймеру
            if(alertParams['hideClass']) {
                setTimeout(function () {
                    $('div.alert').removeClass(alertParams['showClass']);
                    $('div.alert').addClass(alertParams['hideClass']);

                    // при необходимости, удаляем сообщение спустя 3 секунды
                    if(alertParams['removeAlert']) {
                        setTimeout(function () {
                            alert.remove();
                        }, 1000);
                    };

                }, alertParams['hideTime']);
            };

        };

        var alertParams = {
            'text': 'Предупреждение системы',
            'classAlert': 'alert-danger',
            'showClass': 'zoomInRight',
            'hideTime': 3000,
            'hideClass': 'zoomOutRight',
            'removeAlert': 1
        };

        $('#login-form').on('click', function (event) {
            create_alert(alertParams, event);
        });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
27 дек. 2024, в 03:33
1500 руб./за проект
27 дек. 2024, в 02:41
50000 руб./за проект
26 дек. 2024, в 23:03
500 руб./в час