@radnk

Как подправить скрипт?

При многократном нажатии загружается одна страница много раз, как можно исправить?

<div id="true_loadmore">Загрузить ещё</div>
 
jQuery(function($){
        $('#true_loadmore').click(function(){
                $(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
                var data = {
                        'action': 'loadmore',
                        'query': true_posts,
                        'page' : current_page
                };
                $.ajax({
                        url:ajaxurl, // обработчик
                        data:data, // данные
                        type:'POST', // тип запроса
                        success:function(data){
                                if( data ) {
                                        $('#true_loadmore').text('Загрузить ещё').before(data); // вставляем новые посты
                                        current_page++; // увеличиваем номер страницы на единицу
                                        if (currentPage == maxPages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
                                } else {
                                        $('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
                                }
                        }
                });
        });
});


jQuery 1.7.0
  • Вопрос задан
  • 2528 просмотров
Пригласить эксперта
Ответы на вопрос 3
Liatano
@Liatano
вешай обработчик через .on('click',function(){}) ,убивай его(.off('click')) после нажтия кнопки и снова вешай при успешной загрузке контента
Ответ написан
@radnk Автор вопроса
Все работает:

jQuery(function($) {
	$('#true_loadmore').click(function(){
	
    	var $el = $(this),
        	$preloader = $('.preloader');
		var data = {
			'action': 'loadmore',
			'query': true_posts,
			'page' : current_page
		};
		
		$.ajax({
			url:ajaxurl, // обработчик
			type: 'POST',   
			data:data, // данные
			cache: false,
			beforeSend: function( ) {
				$el.hide(); 
				$preloader.show();
			},
			success: function(data){
				if( data ) { 
					$('#true_loadmore').text('Загрузить ещё').before(data); // вставляем новые посты
					current_page++; // увеличиваем номер страницы на единицу
				} else {
					$('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
				}
			}           
		})
		
		.complete(function() {
			$preloader.hide();
			$el.show();           
		});   
	});
});


Но правильно ли это?
Ответ написан
@lnked
<div id="true_loadmore">Загрузить ещё</div>

jQuery(function($){
    $('#true_loadmore').click(function(){
    	if (!$(this).hasClass('in-progress'))
    	{
	    	$(this).addClass('in-progress');
	        $(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
	        var data = {
	            'action': 'loadmore',
	            'query': true_posts,
	            'page' : current_page
	        };
	        $.ajax({
	            url:ajaxurl, // обработчик
	            data:data, // данные
	            type:'POST', // тип запроса
	            success:function(data){
	                if( data ) {
	                    $('#true_loadmore').text('Загрузить ещё').before(data); // вставляем новые посты
	                    current_page++; // увеличиваем номер страницы на единицу
	                    if (currentPage == maxPages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
	                } else {
	                    $('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
	                }

	                $('#true_loadmore').removeClass('in-progress');
	            }
	        });
		}
    });
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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