我有一个拨动开关,但不能正常工作。切换仅在div具有“单击”类时才需要显示(也可以切换),但有时您仍然可以单击..而且在单击时也并不总是有效...我想我要去这完全是错误的:S这是到目前为止我的代码,弄不明白我的意思-fiddle

$(document).ready(function () {
    $('.timelineTile').click(function (evt) {
        evt.stopPropagation();
        $('.selected').children().not(this).removeClass('clicked');
        $(this).toggleClass('clicked');
        if ($('.selected').children().hasClass("clicked")) {
            $('.details').addClass('show');
        }
        if ($('.selected').children().hasClass("clicked")) {
            $(this).children('.item').click(function (e) {
                e.stopPropagation();
                $(this).siblings('.item-overlay').slideToggle('fast');
            });
        }
        if ($('.selected').children().not("clicked")) {
            $('.item-overlay').hide('fast');
        }
    });
});

$(document).click(function () {
    $('.timelineTile').removeClass('clicked');
    $('.details').removeClass('show');

    $('.item-overlay').hide('fast');
});

最佳答案

我不是100%知道该示例的用途,但是您正在将点击处理程序连接到点击处理程序中。我已将其移到外部,并在新的委派点击处理程序中测试了.selected祖先中是否有被点击的孩子:

JSFiddle:http://jsfiddle.net/TrueBlueAussie/xmgb85p5/4/

$(document).ready(function () {
    // Click a tile
    $('.timelineTile').click(function (evt) {
        console.log(".timelineTile click");

        // Stop the click propogating
        evt.stopPropagation();

        // Remove clicked class from all other tiles and hide other overlays
        $('.timelineTile').not(this).removeClass('clicked').find('.item-overlay').hide("fast");

        // Toggle the current tile clicked class
        $(this).toggleClass('clicked');

        // If we are clicked, show details
        if ($(this).hasClass("clicked")) {
            $('.details', this).addClass('show');
        }
    }).on('click', '.item', function (e) {
        console.log(".item click");
        if ($(this).closest('.timelineTile').hasClass("clicked")) {
            e.stopPropagation();
            $(this).siblings('.item-overlay').slideToggle('fast');
        }
    });
});

$(document).click(function () {
    $('.timelineTile').removeClass('clicked');
    $('.details').removeClass('show');

    $('.item-overlay').hide('fast');
});


如果仍然不正确,请说明预期的行为。

09-25 21:54