2012-05-21 2 views
0

у меня есть как система комментариевошибка странно: код выполняется получить более одного раза за клик

, когда я нажимаю на ссылку, как иногда это работает отлично, но несколько раз он посылает до 8-9 запроса за клик! У меня такая же проблема с другим кодом jquery, который работает с событием keydown

<a href="javascript:void(0);" class="like_comment" ><?php echo $likeLable; ?></a> 



$('.like_comment').live('click', function() { 
    var parent = $(this).parent(); 
    var comment_id = parent.parent().find('.comment_id').val(); 
    parent.fadeOut(200); 

    $.post("<?php echo base_url(); ?>album/like", { 
     comment_id: comment_id 
    }, 
    function (data) { 
     if ($.trim(data) == 'ok') { 
      var like_span = parent.parent().find('.like_counter'); 
      var like = parseInt(like_span.text()) + 1; 
      like_span.text(like); 

      parent.html('<a href="javascript:void(0);" class="unlike_comment" ><?php echo $unlikeLable; ?></a>'); 
      parent.fadeIn(200); 
      return false; 
     } else { 
      parent.fadeIn(200); 
      alert(data); 
     } 
    }) 
}) 

Есть ли что-то не так с этим кодом?

ответ

2

Попробуйте вернуть true из обработчика события, чтобы указать, что вы обработали событие. Таким образом, никто другой не заберет его ...

Если это не сработает, вы, вероятно, регистрируете несколько прослушивателей событий для одного и того же события. Используйте свой любимый отладчик, чтобы приостановить выполнение javascript, затем используйте консоль, чтобы проверить все прослушиватели событий на соответствующих элементах dom.

1

Его трудно понять, не видя остальную часть кода и знать, какой элемент щелчок применяется к, поэтому один из следующих 3-х решений может работать:

$('.like_comment').on('click',function(e) { 
    //do something 
    e.preventDefault();  // stops default button action, e.g. submitting a form 
    e.stopPropagation(); // stops event bubbling back to parent element 
    } 
    return false;   /// stops default link action 
}); 

также в качестве бай-зе-полосная , live теперь устарел и вместо этого заменен на «on».

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