Задать вопрос
bismoney
@bismoney

Почему после ajax скролит в начало страницы?

Привет ребята, не могу разобраться.
После отправки комментария и получения успешного ответа ajax происходит innerhtml но при этом страницу прокручивает вверх.
Нашел только что надо задать для #notify фиксированный height, но это не подходит.

function pushComment() {

    const comment_user = document.getElementById("comment_user").value;
    const comment_data = document.getElementById("comment_data").value;

    document.getElementById("notify").innerHTML = "";

    if (comment_data.trim().length < 50) {
        document.getElementById('notify').style.display = 'block';
        document.getElementById('notify').style.background = '#c00';
        const data = 'Сообщение слишком короткое';
        //$('#notify').html(data);
        notify.insertAdjacentHTML('afterbegin', 'Сообщение слишком короткое!<br>');
        setTimeout(function(){
            document.getElementById('notify').style.display = 'none';
        }, 10000);
    } else {

        // ajax param
        const data = {
            comment_user: comment_user,
            comment_data: comment_data,
        };

        $.ajax({
            url: '/api/comments/push',
            type: 'POST',
            data: data,
            success: function(data){
                if (data.result == true) {
                    document.querySelectorAll('textarea').forEach(el=>el.value = '');
                    document.getElementById("notify").innerHTML = "";
                    document.getElementById('notify').style.display = 'block';
                    document.getElementById('notify').style.background = '#16a70e';
                    notify.insertAdjacentHTML('afterbegin', 'Ваш вопрос отправлен<br>Пожалуйста дождитесь ответа!<br>');
                    setTimeout(function(){
                        document.getElementById('notify').style.display = 'none';
                    }, 30000);
                }
                return false;
            },
            error: function(){
                // return;
            }
        });
    }
}


Форма:
<div class="comments__data__form">
<form action="/api/comments/push" method="post">
<input type="hidden" id="comment_user" name="comment_user" value="48160">
<textarea name="comment_data" id="comment_data" rows="6" placeholder="Напишите ваш вопрос ..."></textarea><a href="#" onclick="pushComment()">Задать вопрос</a>
</form>
</div>
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Добавьте return false в конце функции.

Сейчас вы не отменяете действие по умолчанию у ссылки, так что всё равно происходит переход по ссылке href="#", что и вызывает скролл в начало страницы.

Ну а совсем по хорошему, надо бы использовать нормальную кнопку и слушать событие submit у формы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
21 дек. 2024, в 06:04
15000 руб./за проект
21 дек. 2024, в 01:12
1000 руб./за проект
20 дек. 2024, в 22:55
1500 руб./за проект