2

主菜单的点击代码工作类更改,但不是在子菜单上...当单击食物或鞋子等子菜单项时,它不会触发警报命令...实际上悬停非常适合子菜单,但不是积极的

HTML

<aside>
    <div class=sidebar>
        <ul class=nav>
            <li class="home active" data-class="page_home">HOME</li>
            <li class="products" data-class="page_products">BYE</li>
            <li class="ART" data-class="page_art">ART</li>
        </ul>
    </div>
</aside>
<article>
    <div class="page_home show">
        <div class="myhome">
             <h1>Home</h1>

            <p>this is the index page</p>
        </div>
    </div>
    <div class="page_products">
        <ul class="productcat">
            <li class="food">FOOD</li>
            <li class="shoes">SHOES</li>
            <li class="cloths">CLOTHS</li>
        </ul>
    </div>
    <div class="page_art">
        <div class="myart">
             <h1>ART</h1>

            <p>this is art page</p>
        </div>
    </div>
</article>

JS

$(".page_products ul.productcat li").on('click', function (e) {
    var $this = $(this),
        // Class of the one to be shown
        subclazz = $this.data("class");
    alert("button clicked");

    $this.addClass('active').siblings().removeClass('active');
}

$("ul.nav li").on('click', function (e) {
    var $this = $(this),
        // Class of the one to be shown
        clazz = $this.data("class");

    $this.addClass('active').siblings().removeClass('active');

    $('article > div').removeClass('show');
    $('.' + clazz).addClass('show');

}); 

CSS

body {
    width:1020px;
    margin:0 auto;
    position:absolute;
}
aside {
    float:left;
    display:block;
    width:20%;
}
article {
    float:right;
    display:block;
    margin-top:0;
    width:75%;
}
.page_home, .page_products, .page_art{
    visibility:hidden;
}
.show {
    visibility: visible;
}
.sidebar {
    margin-left:10px;
}
.nav {
    display:block;
    margin-top:60px;
    list-style-type:none;
}
ul {
    list-style-type:none;
    color:#000;
}
.nav > li {
    background: #666 no-repeat;
    width:150px;
    height:65px;
    color:#000;
}
.nav >li:hover {
    background:#06F no-repeat;
}
.nav > li.active {
    background:#06F no-repeat;
}


.productcat > li {
    background: #666 no-repeat;
    width:150px;
    height:65px;
    color:#fff;   
    display:inline; 
    padding:10px;
}


.productcat>li:hover {
background:#06F no-repeat;

}

.productcat > li.active {
background:#06F no-repeat;
}
4

2 回答 2

0

尝试使用

$(".page_products ul.productcat li").on('click', function (e) {
    var $this = $(this);
        // Class of the one to be shown
        subclazz = $this.attr("class");
        alert("button clicked");

    $this.addClass('active').siblings().removeClass('active');
}

我变了

subclazz = $this.data("class");

subclazz = $this.attr("class");

var $this = $(this),

var $this = $(this);
于 2013-08-22T11:25:15.370 回答
0

您的代码有 2 个问题..

您忘记了第一个事件处理程序的右括号

$(".page_products ul.productcat li").on('click', function (e) {
    var $this = $(this),
        // Class of the one to be shown
        subclazz = $this.data("class");
    alert("button clicked");

    $this.addClass('active').siblings().removeClass('active');
});
 ^---- Missing closing braces here 

其次,您正在使用data方法来访问自定义方法

  subclazz = $this.data("class");

但是您正在使用的 HTML 是这种形式

<li class="food">FOOD</li>

所以如果你想让你的data方法工作,你的 HTMl 结构应该是

  <li data-class="food">FOOD</li>

此外,您没有在代码中的任何地方使用此变量,这是不必要的。我很惊讶你说你的第二个事件处理程序在你的语法错误之后工作。

在这种情况下,悬停在这里有效,因为样式是使用 CSS 而不是 javascript 应用的,并且 javascript 中的错误在应用样式时不会产生任何影响。

您始终可以通过检查开发人员工具中的控制台来检查 js 中的错误。

检查小提琴

于 2013-08-23T05:05:25.500 回答