2013-04-01 3 views
1

Так что это срабатывает каждый раз, когда пользователь прокручивает страницу, чтобы загрузить больше сообщений.Событие Fire jquery один раз

Он использует

$("#next-paginav")[0].click(); 

, потому что это якорь это '' нажав на.

$(document).ready(function() { 
    $(document).scroll(function (e) { 

     var intBottomMargin = 300; 


     if ($(window).scrollTop() >= $('main-content').height() - $(window).height() - intBottomMargin) { 


      setTimeout(function(){ $("#next-paginav")[0].click(); }, 800); 
     } 

    }); 
}); 

Код Dipesh, с которым я не могу работать.

$(document).ready(function() { 
    $(document).scroll(function (e) { 

     var intBottomMargin = 300; 


     if ($(window).scrollTop() >= $('main-content').height() - $(window).height() - intBottomMargin) { 


      setTimeout(function(){ 
      $("#next-paginav")[0].one('click',function() { }); 

       }, 800); 


     } 

    }); 
}); 

Проблема заключается в том, что он стреляет так быстро, что пожары два, три, четыре раза, прежде чем посты даже загрузить в. Это вызывает все виды проблем, помимо того, что бы делать так много запросов на реальном сервере, иногда он пропускает сообщения. Есть ли способ выстрелить только один раз?

ответ

1
$(document).ready(function() { 
    var timeout = ''; 
    $(window).scroll(function (e) { 
     var intBottomMargin = 300; 
     clearTimeout(timeout); 
     if ($(window).scrollTop() >= $('main-content').height() - $(window).height() - intBottomMargin) { 
      timeout = setTimeout(function(){ 
       $("#next-paginav")[0].click(); 
      }, 800); 
     } 
    }); 
}); 
+0

Отлично, большое вам спасибо! – andy

+0

Хммм, похоже, вы не хотите работать в firefox на OS X, где вы не получаете «отскок» в нижней части страницы, как в Chrome. Однако он работает, когда я беру высоту: 100% от элемента html. Как я могу это исправить? – andy

0

Попробуйте с этим

$("#next-paginav")[0].one('click',function (e) { 

или вы можете попробовать с «живой»

$("#next-paginav")[0].live('click',function (e) { 

в соответствии с «живой» метод нежелателен из jquer1.7 Вы можете использовать «на» метод как

$("#next-paginav")[0].on('click',function (e) { 
+0

вы можете заменить жить с «на» методе. live устарел. btw i dint downvote –

+0

Yah Я уже упоминал, что сейчас – Gautam3164

+0

@ GautamD3164 Проблема с этим я не вижу, как его интегрировать. setTimeout (function() {$ ("# next-paginav") [0] .click();}, 800); Как мне положить это? $ ("# next-paginav") [0] .one ('click', function (e) { – andy

1

Вы можете использовать .one() обработчик JQuery ..

Description: Attach a handler to an event for the elements. The handler is executed at most once per element.

Official Document

Пример

$("#next-paginav")[0].one('click',function() { }); 

Вы также можете использовать .off() обработчик тоже.

Пример

$("#next-paginav")[0].click(function(){ 
    $(this).off(event); 
}); 
+0

Это не работает. setTimeout (function() {$ ("# next-paginav") [0] .one ('click', function();}, 800); – andy

+0

@andy, что именно вам нужно. click event once .. ?? если да, то над кодом работает ... если вы хотите вызвать событие click затем используйте обработчик jQuery '.trigger'. –

+0

Я хочу, чтобы он срабатывал один раз, ваш код дает мне ошибку «Uncaught TypeError: Object [object HTMLAnchorElement] не имеет метода« один »» Это: - $ ("# next-paginav") [0] .one ('click', function() {}); не работает – andy

0

Мое предположение, если уже есть нагрузка графики, то вы не хотите, чтобы вызвать загрузку снова.

Вы можете использовать решение, базирующееся флаг

$(document).ready(function() { 

    var intBottomMargin = 300; 

    $(document).scroll(function(e) { 
     if (clickFlag) { 
      return; 
     } 

     clickFlag = true; 

     if ($(window).scrollTop() >= $('main-content').height() 
       - $(window).height() - intBottomMargin) { 

      setTimeout(function() { 
         $("#next-paginav")[0].click(); 
        }, 800); 
     } 

    }); 
}); 

var clickFlag = false; 
function myClickHandler() { 
    $.ajax({}).always(function() { 
       clickFlag = false; 
      }) 
} 
+0

Это работает в первый раз, но загружает только первый набор сообщения больше не загружаются. – andy

+0

Вы можете делиться обработчиком по клику –

+0

Э-э, я не знаю, что это такое. – andy

Смежные вопросы