0
$(".p-list > ul > li").click(function () {

    if ($(this).children('.sub-parts').length > 0) {

        if (!$(this).hasClass('open')) {
            $(this).addClass('open');
            $(this).find('.sub-parts').fadeIn('normal');
        }
    }
});


$(document.body).on('click', ".p-list .open-tl", function () {
    if ($(this).parent('.open').length > 0) {
        $open = $(this).parent('.open');
        $($open).find('.sub-parts').hide();
        $($open).removeClass('open');
    }
});

クリックするとdivを非表示にし、open'tab.open-tlをクリックすると表示するこのコードがあります。

問題は、2番目のコードを実行したくないときに、Fadeinコードの後に​​2番目のコードが実行されることです。

誰かがhttp://jsfiddle.net/vNfeD/をチェックしてください

4

1 に答える 1

2
$open = $(this).parent('.open');
$($open).find('.sub-parts').hide();
$($open).removeClass('open');

でなければなりません

$open = $(this).parent('.open');
$open.find('.sub-parts').hide();
$open.removeClass('open');

そしてあなたはそれを減らすことができます

$(this).parent('.open').removeClass('open').find('.sub-parts').hide();

親を削除できる場合、オブジェクトが空の場合、jqueryは何もしません

if ($(this).parent('.open').length > 0) { // remove that

子が非表示になっているときに2番目のコードの実行を許可しない場合は、event.stopPropagation();を追加します。.openがない場合と、潜水艦がある場合は、フィドルを確認してください

http://jsfiddle.net/r043v/vNfeD/5/

于 2013-03-13T07:55:03.120 に答える