简体   繁体   English

在li上显示隐藏的div具有“已选择”类

[英]Show hidden div on li has class 'selected'

i have a script that display a div that is hidden in a li, but currently it only show the div from the first li, the script add the class 'selected' on the other li but show the div from the first one. 我有一个脚本,显示一个隐藏在li中的div,但当前它仅显示第一个li的div,该脚本在另一个li上添加了“ selected”类,但显示了第一个li的div。

Here is my code 这是我的代码

$(document).on("pageinit", function(e){
    $(".menu_slide").click(function(event) {
        $(this).parents('li').addClass('selected');

        var sm = $($("#"+ $(e.target).attr('id') +" :jqmData(slidemenu)").data('slidemenu'));   
        var sa =  $('li.selected').attr('class');
        // console.log(sm);
        if($("li").hasClass("selected")){
            $(document).on("click", ":jqmData(slidemenu)", function(e) {
                // console.log(sm.data('slideopen'));
                slidemenu(sm, sm.data('slideopen'));
                e.stopImmediatePropagation();
                e.preventDefault();
            }); sta
        } else {
            // Todo code
        }
    });
});

function slidemenu(sm, only_close) {
    if (!sm.data('slideopen') && !only_close) {

        var swipe = $('.menu_slide_swipe');
        var wi = $(window).width();

        // Portrait Phone
        if(wi == 320){
            sm.show().animate({ left:'31px', avoidTransforms: true, useTranslate3d: true}, 'fast'); 
            swipe.show().animate({ left:'6px', avoidTransforms: true, useTranslate3d: true}, 'fast');
            sm.data('slideopen', true);
        }

        // Landscape Phone
        if (wi == 569){
            sm.show().animate({ left:'307px', avoidTransforms: true, useTranslate3d: true}, 'fast');
            swipe.show().animate({ left:'281px', avoidTransforms: true, useTranslate3d: true}, 'fast');
            sm.data('slideopen', true);         
        } 

        // Portrait Tablet
        if(wi == 769){
            sm.show().animate({width:'450px', left:'302px', avoidTransforms: true, useTranslate3d: true}, 'fast');  
            swipe.show().animate({ left:'276px', avoidTransforms: true, useTranslate3d: true}, 'fast');
            sm.data('slideopen', true);
        }

        // Landscape Tablet
        if(wi == 1024){
            sm.show().animate({width:'450px', left:'552px', avoidTransforms: true, useTranslate3d: true}, 'fast');  
            swipe.show().animate({ left:'525px', avoidTransforms: true, useTranslate3d: true}, 'fast');
            sm.data('slideopen', true);
        }

        if ($(":jqmData(role='header')").data('position') == 'fixed') {
        } else {
            $(":jqmData(slidemenu)").css('margin-left', '10px');
        }

    } else {
        var swipe = $('.menu_slide_swipe');
        sm.animate({left:'-260px', avoidTransforms: false, useTranslate3d: true}, 'fast', function(){sm.hide()});
        swipe.animate({left:'-60px', avoidTransforms: false, useTranslate3d: true}, 'fast', function(){swipe.hide()});
        sm.data('slideopen', false);
        $(":jqmData(slidemenu)").css('margin-left', '0px');
        $("li.ui-li").removeClass("selected");
    }
    return false;
}

EDIT 编辑

$(".menu_slide").click(function (event) {
    $(this).parents('li').addClass('selected');
    var sm = $($("#" + $(e.target).attr('id') + " :jqmData(slidemenu)").data('slidemenu'));
    var sa = $('li.selected').attr('class');
});
$(document).on("click", "li.selected :jqmData(slidemenu)", function (e) {
    var sm = $($("#" + $(e.target).attr('id') + " :jqmData(slidemenu)").data('slidemenu'));
    slidemenu(sm, sm.data('slideopen'));
    e.stopImmediatePropagation();
    e.preventDefault();
});

Move the binding of the event to outside of $(".menu_slide").click event. 将事件的绑定移到$(".menu_slide").click事件之外。 This makes the event to be bound multiple times to the same element 这使事件多次绑定到同一元素

 $(document).on("click", "li.selected :jqmData(slidemenu)", function(e) {
      // console.log(sm.data('slideopen'));
      slidemenu(sm, sm.data('slideopen'));
      e.stopImmediatePropagation();
      e.preventDefault();
}); 

You don't seem to ever be removing the 'selected' class from any <li>s. 您似乎从未从任何<li>中删除“ selected”类。 On each click, before adding this line: 每次点击之前,添加以下行:

$(this).parents('li').addClass('selected');

Remove 'selected' class from all potentially affected LIs and reset it. 从所有可能受影响的LI中删除“选定”类,然后将其重置。

Also, as Kevin B mentioned, a click within a click is seriously weird structure. 此外,正如Kevin B所述,点击内的点击是一种非常怪异的结构。 You'd likely be better off just having the click even on jqmData(slidemenu) at the outset then checking for the 'selected' class within it, instead of trying to place the if outside and conditionally bind it. 您最好先在jqmData(slidemenu)上单击一下,然后检查其中的“ selected”类,而不是尝试将if放在外面并有条件地绑定它,这样可能会更好。 Or, depending on the HTML, perhaps do something like `li.selected > :jqmData(slidemenu)' as your selector (I'm guessing at how your DOM is structured, obviously). 或者,根据HTML的不同,也许做类似“ li.selected>:jqmData(slidemenu)”的事情作为选择器(显然,我在猜测DOM的结构)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM