Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2016, 22:06   #1
EvilScorpion
 
Регистрация: 22.02.2016
Сообщений: 8
По умолчанию Конфликт? лайки и прокрутка ajax

Привед Уважаемые программисты.
Делаю вывод новостей каждые 6 постов, но тут походу конфликт или я не пойму в чем дело, перестает работать "лайк и дизлайк" после вывода 6 новых новостей при скролинге т.е все новости которые выводятся через ajax скрилинг лайки и дизлайки прекращают работать а первые 6 новостей работают.

Вот два когда, первый скролинг и второй //VOTE лайки и дизлайки
PHP код:
                
            
//####### on page load, retrive votes for each content
    
$.each( $('.voting_wrapper'), function(){
        
        
//retrive unique id from this voting_wrapper element
        
var unique_id = $(this).attr("id");
        
        
//prepare post content
        
post_data = {'unique_id':unique_id'vote':'fetch'};
        
        
//send our data to "like_dislike.php" using jQuery $.post()
        
$.post('like_dislike.php'post_data,  function(response) {
        
                
//retrive votes from server, replace each vote count text
                
$('#'+unique_id+' .up_votes').text(response.vote_up); 
                $(
'#'+unique_id+' .down_votes').text(response.vote_down);
            },
'json');
    });
    
    
    
//####### on button click, get user vote and send it to like_dislike.php using jQuery $.post().
    
$(".voting_wrapper .voting_btn").click(function (e) {
         
        
//get class name (down_button / up_button) of clicked element
        
var clicked_button = $(this).children().attr('class');
        
        
//get unique ID from voted parent element
        
var unique_id     = $(this).parent().attr("id"); 
        
        if(
clicked_button==='down_button'//user disliked the content
        
{
            
//prepare post content
            
post_data = {'unique_id':unique_id'vote':'down'};
            
            
//send our data to "like_dislike.php" using jQuery $.post()
            
$.post('like_dislike.php'post_data, function(data) {
                
                
//replace vote down count text with new values
                
$('#'+unique_id+' .down_votes').text(data);
                
                
//thank user for the dislike
            //    alert("Thanks! Each Vote Counts, Even Dislikes!");
                
            
}).fail(function(err) { 
            
            
//alert user about the HTTP server error
            //alert(err.statusText); 
            
});
        }
        else if(
clicked_button==='up_button'//user liked the content
        
{
            
//prepare post content
            
post_data = {'unique_id':unique_id'vote':'up'};
            
            
//send our data to "like_dislike.php" using jQuery $.post()
            
$.post('like_dislike.php'post_data, function(data) {
            
                
//replace vote up count text with new values
                
$('#'+unique_id+' .up_votes').text(data);
                
                
//thank user for liking the content
                //alert("Thanks! For Liking This Content.");
            
}).fail(function(err) { 
            
            
//alert user about the HTTP server error
            
alert(err.statusText); 
            });
        }

    });
    
//end 
    
/* Переменная-флаг для отслеживания того, происходит ли в данный момент ajax-запрос. В самом начале даем ей значение false, т.е. запрос не в процессе выполнения */    
var inProgress false;
/* С какой статьи надо делать выборку из базы при ajax-запросе */ 
var startFrom 6;

    
/* Используйте вариант $('#more').click(function() для того, чтобы дать пользователю возможность управлять процессом, кликая по кнопке "Дальше" под блоком статей (см. файл index.php) */
    
$(window).scroll(function() {

                
        
/* Если высота окна + высота прокрутки больше или равны высоте всего документа и ajax-запрос в настоящий момент не выполняется, то запускаем ajax-запрос */
        
if($(window).scrollTop() + $(window).height() >= $(document).height() && !inProgress) {
    
        $.
ajax({            
            
/* адрес файла-обработчика запроса */
            
url'obrabotchik.php',
            
/* метод отправки данных */
            
method'POST',
            
/* данные, которые мы передаем в файл-обработчик */
            
data: {"startFrom" startFrom},
            
/* что нужно сделать до отправки запрса */
            
beforeSend: function() {
                
            
/* меняем значение флага на true, т.е. запрос сейчас в процессе выполнения */
            
inProgress true;}
            
            
/* что нужно сделать по факту выполнения запроса */            
            
}).done(function(data){
                
            
            
/* Преобразуем результат, пришедший от обработчика - преобразуем json-строку обратно в массив */ 
            
data jQuery.parseJSON(data);
            
            
/* Если массив не пуст (т.е. статьи там есть) */
            
if (data.length 0) {
                         
            
/* Делаем проход по каждому результату, оказвашемуся в массиве,
            где в index попадает индекс текущего элемента массива, а в data - сама статья */ 
                
            
$.each(data, function(indexdata){
                   
            
/* Отбираем по идентификатору блок со статьями и дозаполняем его новыми данными */    
            
$("#articles").append("<div  class='webo4ka1'><div class='webo4ka2'>\
            <img class='mem'  src='uploads/"
data.path +"' title='"data.description +"' /></div><div class='my_bot'>\
            <div class=\"voting_wrapper\" id=\""
data.id +"\">\
            <div class=\"voting_btn\"><div class=\"down_button\"><span class=\"dis_like\"><img src=\"img/happy.png\"/></span></div><span class=\"down_votes\">0</span></div>\
            <div class='voting_btn'><div class='up_button'><span class='like'><img src='img/happy.png'/></span></div><span class='up_votes'>0</span></div>\
            <span class=report'></span>\
            </div></div></div>"
);
            });
    
                    
            
/* По факту окончания запроса снова меняем значение флага на false */
            
inProgress false;
            
// Увеличиваем на 10 порядковый номер статьи, с которой надо начинать выборку из базы
            
startFrom += 6;

     
            }});   
        }
    });
}); 
EvilScorpion вне форума Ответить с цитированием
Старый 15.10.2016, 23:37   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

потомушта на них не привязываются события: либо привязывай после подгрузки, либо изай живые события. api.jquery.com/on/
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 16.10.2016, 01:30   #3
EvilScorpion
 
Регистрация: 22.02.2016
Сообщений: 8
По умолчанию

Может скажете как их привязать?
EvilScorpion вне форума Ответить с цитированием
Старый 16.10.2016, 01:38   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

По ссылке выше все показано и рассказано же.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.10.2016, 13:31   #5
EvilScorpion
 
Регистрация: 22.02.2016
Сообщений: 8
По умолчанию

Вроде получилось, сделал из лайков функции и вывел в скролинге
Код:
$( window ).trigger( "click", my__load_Button());
$(window).trigger( "click", my__Button());
EvilScorpion вне форума Ответить с цитированием
Старый 16.10.2016, 13:57   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

эм... А .trigger причем тут? Может проще тогда просто вызвать эту функцию? Тем более что вы вроде бы это и делаете, только вокруг вызова еще понаписали всякие странные вещи.
Код:
my__load_Button();
Про on речь была о том, что кодом типа
Цитата:
Код:
$(".voting_wrapper .voting_btn").click(function (e) {
вы добавляете обработчик клика только для существующих в момент вызова элементов.

А если сделать как-то так, то будет работать и для новых элементов:
Код:
$( "body" ).on( "click", ".voting_wrapper .voting_btn", function(e) {
(вместо body может быть любой селектор всегда существующего родителя, в котором они все лежат)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.10.2016, 14:18   #7
EvilScorpion
 
Регистрация: 22.02.2016
Сообщений: 8
По умолчанию

Почему то при простом выводе функций, а именно где отслеживается клик по лайку или дизлайку, он не +1 делает, а +2 +6 и бывает даже +30 ну рандомное число какое вообщем, мне кажется это зависит от того сколько раз погрузился скролинг.
EvilScorpion вне форума Ответить с цитированием
Старый 16.10.2016, 14:22   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Да, вероятно вы таким способом вешаете несколько одинаковых обработчик на один элемент. (+1 обработчик у всех старых при каждом скроле)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить лайки для соц. сетей для своего сайта IT-Lopata HTML и CSS 2 09.04.2014 23:33
Нужен скрипт на лайки или на регистрацию на сайте!!! Wilfred Фриланс 1 30.05.2013 06:28
лайки, рейты, просмотры, комменты alimov7 Помощь студентам 0 01.10.2012 21:52
Конфликт JQuery and Ajax 3dg_fan Помощь студентам 0 07.06.2011 08:34
Конфликт IP Fellics{новичок} Компьютерное железо 3 30.12.2009 19:15