jquery click事件仅运行一次

时间:2013-03-21 11:35:26

标签: click jquery

我遇到点击事件的问题。它运行一次。例如:

我有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/

4 个答案:

答案 0 :(得分:2)

这与replaceWith调用有关,它取代了DOM中的Html并有效地解除了绑定事件。如果您使用jQuery propattrtext函数来更新链接属性,则应解决此问题。

或者将事件处理程序存储在变量中并在处理程序中重新绑定也可以解决问题。

答案 1 :(得分:2)

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

您也可以在以前的版本中使用.live()。但不推荐使用。

答案 2 :(得分: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();
        });         

答案 3 :(得分:0)

这是因为您要删除<a> - 标记,因此点击处理程序会分离。

考虑使用.on()而不是点击。它的行为和语法在这里被描述:http://api.jquery.com/on/

基本上不是$("div .top.pagination a").click(function(){ /* ... */ });

你打电话给以下人员:

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