jQuery - 单击按钮时触发 show(),hide()

标签 jquery

与我的fiddle ,我让它在加载时突出显示主菜单按钮之一,并在底部设置相应的按钮。

我认为错误但无法弄清楚自己是在我的 switch 语句中执行 $this 变量的引用范围的事情。就我而言, $this 指向单击的按钮值,我认为该值是类的名称,但在我的 switch 语句中,我不确定是否可以引用 $this 中的 id 名称。我想我的问题是 $this 在我的场景中具有什么值(value)?

很高兴看到一个工作示例,可能需要更少的代码,因为我可以看到许多可以简化的重复项。

$('.menu').click(function () {
    if ($(this) != $('.highlight')) {
        $(this).addClass('highlight')
            .siblings('.menu')
            .removeClass('highlight');
    }
    switch ($this) {
        case '#dateMenu':
            $('.date-chart').show();
            $('.jc-chart').hide();
            $('.jp-chart').hide();
            $('.ws-chart').hide();
            break;
        case '#jcMenu':
            $('.date-chart').hide();
            $('.jc-chart').show();
            $('.jp-chart').hide();
            $('.ws-chart').hide();
            break;
        case '#jpMenu':
            $('.date-chart').hide();
            $('.jc-chart').hide();
            $('.jp-chart').show();
            $('.ws-chart').hide();
            break;
        case '#wsMenu':
            $('.date-chart').hide();
            $('.jc-chart').hide();
            $('.jp-chart').hide();
            $('.ws-chart').show();
            break;
    }
});

最佳答案

$this 应该是 $(this) ...这是对当前元素的引用...因为您正在检查 id。使用 prop()

 switch ($(this).prop('id')) {  or  switch (this.id) { ...

并从案例中删除#

试试这个

 $('.menu').click(function () {
if (!$(this).hasClass('.highlight'))) {
    $(this).addClass('highlight')
        .siblings('.menu')
        .removeClass('highlight');
}

switch ($(this).prop('id')) {
    case 'dateMenu':
        $('.date-chart').show();
        $('.jc-chart').hide();
        $('.jp-chart').hide();
        $('.ws-chart').hide();
        break;
    case 'jcMenu':
        $('.date-chart').hide();
        $('.jc-chart').show();
        $('.jp-chart').hide();
        $('.ws-chart').hide();
        break;
    case 'jpMenu':
        $('.date-chart').hide();
        $('.jc-chart').hide();
        $('.jp-chart').show();
        $('.ws-chart').hide();
        break;
    case 'wsMenu':
        $('.date-chart').hide();
        $('.jc-chart').hide();
        $('.jp-chart').hide();
        $('.ws-chart').show();
        break;
}
});

fiddle here

已更新

为了减少代码...您可以使用siblings()。

 switch ($(this).prop('id')) {
    case 'dateMenu':
        $('.date-chart').show().siblings().hide();

        break;
    case 'jcMenu':

        $('.jc-chart').show().siblings().hide();

        break;
    case 'jpMenu':

        $('.jp-chart').show().siblings().hide();

        break;
    case 'wsMenu':

        $('.ws-chart').show().siblings().hide();
        break;
}

updated fiddle

关于jQuery - 单击按钮时触发 show(),hide(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17646915/

相关文章:

jquery - 如何在移动设备上禁用(而不是隐藏)BxSlider

javascript - 如何在右键单击时启用网络浏览器的默认上下文菜单?

php - 如何提交 PHP 表单而不重定向到操作文件? (使用ajax发送和获取数据)

javascript - 如何将JSON结果放入DIV中?

javascript - 我的代码中的 Jquery 删除行表错误

jquery - 在 Rails 中,使用 Jquery/Ajax 更新 div

javascript - 使用 imgNotes 在特定位置显示文本

javascript - .is() 在 Cheerio 中不存在?

php - 在 jquery .serialize() 之后如何处理 php

javascript - jQuery动态表计算