gazes12
@gazes12

Почему моя функция выполняется по многу раз за один вызов?

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

Функция при первом вызове работает нормально, а со второго вызова начинает по 2,4, 20 раз выполнятся и посылать по несколько ajax запросов с разным содержанием.

Вот функция:
function changeComment(data){
    const _this = data;
    const _thisId = _this.attr('id');

    change_id.html('id: ' + _thisId)

    create_form.removeClass('visible');
    change_form.addClass('visible');

;
    recalls__result.addClass('recalls__result--succ visible');
    recalls__result.text('Измените отзыв!');


    applyUpdateds.click((e) =>{
        console.log('apply'); /*выводится по 2,4, иногда по 20 за раз*/
        e.preventDefault();

        const nameValue= change_name.val();
        const surnameValue = change_surname.val();
        const recallValue = change_recall.val();


        $.ajax({
            url: '../php/recalls/change_recall.php',
            type: 'POST',
            dataType: 'json',
            data: {
                id: _thisId,
                newName: nameValue,
                newSurName: surnameValue,
                newRecall: recallValue,
            },

            success: function(result){;
                console.log(result.updatedRecall[0].id); /*выводится по 2-3 значения за один раз*/
                if(result.errors){
                    recalls__result.html(`<div class="comments__result--error comments__result">${result.errors}</div>`)
                }else{
                    _this.closest('.recall__people').find('.recall__people-fio-name').html(`
                    <p class="recall__people-fio-name">${result.updatedRecall[0].name}</p>
                    `);

                    _this.closest('.recall__people').find('.recall__people-fio-surname').html(`
                    <p class="recall__people-fio-surname">${result.updatedRecall[0].surname}</p> 
                    `);

                    _this.closest('.recall').find('.recall__text').html(`
                    <p class="recall__people-fio-surname">${result.updatedRecall[0].recall}</p> 
                    `);

                    recalls__result.html(`<div class="comments__result--succ comments__result">Комментарий изменен!</div>`);
                }
            },
        });
    });
}

$(document).on('click', '.recall__people-buttons-change', function(){
    changeComment($(this));
});


<?php
require '../config.php';

    $id = $_POST['id'];
    $newName = trim($_POST['newName']);
    $newSurName = trim($_POST['newSurName']);
    $newRecall = trim($_POST['newRecall']);

    $query = $conn->prepare("SELECT * FROM `recalls` WHERE `recall` = :recall");
    $query->execute(['recall' => $newRecall]);

    if($query->rowCount() > 0){
        $errors[] = 'Такой комментарий уже существует!';
    }else if($newName == ''  || $newRecall == ''){
        $errors[] = 'Заполните все поля!';
    }else if(preg_match('/\A\d+\z/', $newName) || preg_match('/\A\d+\z/', $newSurName) || preg_match('/\A\d+\z/', $newRecall)){
        $errors[] = 'В полях запрещено вводить только цифры!';
    }

    if(empty($errors)){
        $query = $conn->prepare('UPDATE `recalls` SET `name` = :newName, `surname` = :newSurName, `recall` = :newRecall WHERE `recalls`.`id` = :id');
        $query->execute(['id' => $id, 'newName' => $newName, 'newSurName' => $newSurName, 'newRecall' => $newRecall]);
    
        $query = $conn->prepare('SELECT * FROM `recalls` WHERE `id` = :id');
        $query->execute(['id' => $id]);

        $updatedRecall = [];
        $updatedRecall = $query->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode(array('updatedRecall' => $updatedRecall));
    }else{
        echo json_encode(array('errors'=> array_shift($errors)));
    }

?>
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@vitaliy_balahnin
Новичок в веб-разработке
changeComment сколько раз вызывается?
Если вы говорите при первом вызове все нормально, а при втором у вас 2,4,20.
applyUpdateds.click у вас внутри этой функции.
Очевидный вывод я думаю сами сделаете.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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