0

リンクがクリックされたときにいくつかの要素を切り替えたいだけです:

これが私が試みている方法です(しかし、この質問では、イベント関数のコールバックの内容がそれほど重要であるとは思いません):

/* 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;
    }
});

クリックによってログが2回発生するのはなぜですか?

4

3 に答える 3

1

ページに同じjQueryのチャンクが2回あるようです。2つのバインド=2つの火災。

499行目と1481行目。

于 2012-09-01T21:35:22.753 に答える
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);
}
于 2012-09-01T21:26:32.127 に答える
0

クラスセレクターを使用しているので、クリックイベントがいくつかの要素をバブリング/伝播している可能性はほとんどありませんtoggleCommentse.stopPropagation()あなたの場合に役立つはずです。

preventDefaultクリック自体を停止するため、要素がハイパーリンクである場合は、そのメソッドを使用しないことをお勧めします。div、spanなどの場合は、いつでもfalseを返すことができます。jQueryでは、falseを返すと、イベントの伝播/バブリングが停止し、デフォルトが防止されます。

于 2012-09-01T21:33:26.667 に答える