点击一下,两次点击'事件被解雇

时间:2012-09-01 21:20:53

标签: javascript jquery toggle

我只想在点击链接时切换一些元素:

这就是我的尝试方式(但我真的不认为这个问题对于事件函数回调中的内容有多重要):

/* mostrar exceso de comentarios a peticion del usuario*/
$('.toggleComments').click(function(){
        console.log('.toggleComments');
        if($(this).parents('.helpContent').find('.commentHideble:visible').length > 0){
            $(this).text('+ <?=get_texto_clave('show_old_comments')?>').removeClass('toggleCommentsActive').append(' ('+$(this).parents('.helpContent').find('.commentHideble:not:visible').length+'+)');
        }else{
            $(this).text('- <?=get_texto_clave('hide_old_comments')?>').addClass('toggleCommentsActive');
        }
        $(this).parents('.helpContent').find('.commentHideble').slideToggle(100);

});

我甚至尝试了一个布尔值,但给了我相同的结果

/* mostrar exceso de comentarios a peticion del usuario*/


var ctoggle = false;
$('.toggleComments').click(function(){
    if(ctoggle == false){
        ctoggle = true;
        console.log('.toggleComments');
        if($(this).parents('.helpContent').find('.commentHideble:visible').length > 0){
            $(this).text('+ <?=get_texto_clave('show_old_comments')?>').removeClass('toggleCommentsActive').append(' ('+$(this).parents('.helpContent').find('.commentHideble:not:visible').length+'+)');
        }else{
            $(this).text('- <?=get_texto_clave('hide_old_comments')?>').addClass('toggleCommentsActive');
        }
        $(this).parents('.helpContent').find('.commentHideble').slideToggle(100);
        ctoggle = false;
    }
});

为什么单击会触发两次日志?

3 个答案:

答案 0 :(得分:1)

看起来你在页面中有两次相同的jQuery块。两个绑定=两个火焰。

第499和1481行。

答案 1 :(得分:0)

jsfiddle页面会有所帮助,但同时你可以试试这个:

$('.toggleComments').click(function(e){

    e.stopPropagation(); 

    console.log('.toggleComments');
    if($(this).parents('.helpContent').find('.commentHideble:visible').length > 0){
        $(this).text('+ <?=get_texto_clave('show_old_comments')?>').removeClass('toggleCommentsActive').append(' ('+$(this).parents('.helpContent').find('.commentHideble:not:visible').length+'+)');
    }else{
        $(this).text('- <?=get_texto_clave('hide_old_comments')?>').addClass('toggleCommentsActive');
    }
    $(this).parents('.helpContent').find('.commentHideble').slideToggle(100);
}

答案 2 :(得分:0)

由于您正在使用类选择器,因此click事件不会在几个元素上冒泡/传播,所有元素都使用toggleComments类。 e.stopPropagation()应该对您有所帮助。

preventDefault会停止点击本身,因此如果元素是超链接,最好不要使用该方法。如果它只是一个div,span或者其他什么,你总是可以返回false。在jQuery中,返回false stop事件Propagation / bubbling 可以防止默认。