2013-03-21 4 views
1

У меня возникла проблема с событием click. Он работает один раз. Пример:Запуск события jquery click только один раз

У меня есть 3 страницы (1 2 3). когда я нажимаю на 2, он работает. затем на 3 странице, и он снова работает. Но я нажимаю в 2 раза, но не работает. Событие не запускается.

$("div .top.pagination a").click(function(){ 

PagNrClick = $(this).text(); 
      PagNrOld = $(".top.pagination .current").text();  
      RegMin = (NrReg-1)*(PagNrClick-1); 


      //altera a pagina activa para por selecionar 
      $(".top.pagination .current").replaceWith('<a title="'+PagNrOld+'" href="#'+PagNrOld+'" rel="history">'+PagNrOld+'</a>'); 
      //altera a pagina que clicou para activa 
      $(this).replaceWith('<span class="current">'+PagNrClick+'</span>');    

      if(RegMin%2 || RegMin%0){ 
       RegMinValue = RegMin; 
      }else{ 
       RegMinValue = RegMin+1; 
      } 
      //:gt(0) - greater then 0 não mostra a 1º posição(BUG DO JQUERY??????) 
      if(PagNrClick==1){ 
       $("#thumbs li:eq(0)").show(); 
      } 
      //esconde todos os registos e mostra os 12 proximos registos 
      $(".thumbs li:visible").hide(); 
      $(".thumbs li:gt("+RegMinValue+"):lt("+NrReg+")").show(); 
}); 

я должен вставить код в jsfiddle

http://jsfiddle.net/B2Usk/1/

+0

Как вы думаете, '.top.pagination' не так? – hjpotter92

+0

нет. его 2 класса в на div – macieira

ответ

2
$("div .top.pagination").on('click', 'a', function(){ 
    /* ... Youre event code ... */ 
}); 

Вы также можете использовать .live() в предыдущих версиях. Но он устарел.

+0

Это сработало :) Большое спасибо. – macieira

2

Это связано с replaceWith вызова, который заменяет Html в DOM и эффективно развязывает событие. Если вы используете функции jQuery prop, attr и text для обновления свойств ссылок, это должно устранить проблему.

Альтернативно, хранение обработчика событий в переменной и переупорядочение в обработчике также может решить проблему.

0

Это происходит из-за того, что вы удаляете <a> -Tag, поэтому отключатель кликов отсоединяется.

Рассмотрите возможность использования .on() вместо щелчка. Это поведение и синтаксис descibed здесь: http://api.jquery.com/on/

В основном вместо $("div .top.pagination a").click(function(){ /* ... */ });

вы звоните следующее:

$("div .top.pagination").on('click', 'a', function(){ 
    /* ... Youre event code ... */ 
}); 
+2

На той же странице также упоминается ** версия устарела: 1.7, удалена: 1.9 ** – hjpotter92

+0

use on(), live устарел. –

+0

Да, извините. Всегда забывайте об этом ... –

1

заменить click с on

DEMO

$("div .top.pagination").on('click', 'a',function(){ 
      PagNrClick = $(this).text(); 
      PagNrOld = $(".top.pagination .current").text();  
      RegMin = (NrReg-1)*(PagNrClick-1); 


      //altera a pagina activa para por selecionar 
      $(".top.pagination .current").replaceWith('<a title="'+PagNrOld+'" href="#'+PagNrOld+'" rel="history">'+PagNrOld+'</a>'); 
      //altera a pagina que clicou para activa 
      $(this).replaceWith('<span class="current">'+PagNrClick+'</span>');    

      if(RegMin%2 || RegMin%0){ 
       RegMinValue = RegMin; 
      }else{ 
       RegMinValue = RegMin+1; 
      } 
      //:gt(0) - greater then 0 não mostra a 1º posição(BUG DO JQUERY??????) 
      if(PagNrClick==1){ 
       $("#thumbs li:eq(0)").show(); 
      } 
      //esconde todos os registos e mostra os 12 proximos registos 
      $(".thumbs li:visible").hide(); 
      $(".thumbs li:gt("+RegMinValue+"):lt("+NrReg+")").show(); 
     });   
Смежные вопросы