@hakkol

Почему alert вызывается несколько раз?

Доброго времени суток, есть кнопка, которая по клику вызывает форму с одной кнопкой. При нажатии на кнопку "удалить форму" - удаляется форма. Когда для кнопки удаления сделал предупреждающее окно, то обнаружил следующую проблему - оно может вызваться несколько раз. Если создам 10 форм, то при нажатии на удаление первой формы, предупреждение появиться 10 раз. Почему код работает именно так и как можно устранить эту проблему?
var i = $('.form').size();

    $('#add_form').click(function() {
        i = $('.form:last').attr('id');
        ++i;
        $('<div id="'+ i +'" class="form">\n' +
            '<input type="text" class="form_input form-control" " placeholder="Название формы"/>\n' +
            '<textarea class="form_input form-control" rows="5"  placeholder="Описание формы"></textarea>\n' +
            '<span class="remove_form btn btn-danger">Удалить форму</span>\n' +
            '</div>') .
        fadeIn('slow').appendTo('.all_form');

        $('.remove_form').click(function() {
            if (confirm("Вы хотите удалить форму?") == true) {
                $($(this).parent('.form')).remove();
                i--;
            }
        });

    });
  • Вопрос задан
  • 780 просмотров
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Дело в том, что вы обработчик удаления зачем-то ставите внутри обработчика добавления. Нужно делать так:

$('#add_form').click(function() {
    var i = ($('.form:last').attr('id') || 0) + 1;
    $('<div id="'+ i +'" class="form">\n' +
        '<input type="text" class="form_input form-control" " placeholder="Название формы"/>\n' +
        '<textarea class="form_input form-control" rows="5"  placeholder="Описание формы"></textarea>\n' +
        '<span class="remove_form btn btn-danger">Удалить форму</span>\n' +
        '</div>')
    .fadeIn('slow').appendTo('.all_form');
});

$('.remove_form').click(function() {
    if (confirm("Вы хотите удалить форму?")) {
        $(this).closest('.form').remove();
    }
});


P.S. Обратите внимание, я в вашем коде поправил еще некоторые странности.
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
Потому что вы не должны создавать обработчик клика remove_form внутри обработчика клика add_form. Вынесите наружу.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы