【问题标题】:Changing CSS hover property using jquery not working使用 jquery 更改 CSS 悬停属性不起作用
【发布时间】:2014-04-08 08:44:45
【问题描述】:

我知道我遗漏了一些明显的东西,并且我从这篇文章中得到了一些诱人的提示:

CSS hover selector for background-color not working after dynamic change of background-color with jquery

但我对 jquery 还太陌生,看不出我做错了什么。这么快的背景:

开始并调整了这个示例下拉菜单:http://www.w3csolutions.com/website-resources/Horizontal-Menu/jQuery-Menu/smoth-jQuery-menu/

部分调整是这样的:

HTML File
        <ul  class="le_menu_bgcolor le_menu_topUl">
                <li class=" le_menu_shape_left le_menu_fgcolor">
                    <p>Left</p>
                    <p class="le_menu_aHover"> 
                        <A href="#tabs1">Left Tab</A>
                    </p>
                </li>
                <li class="le_menu_shape le_menu_fgcolor">
                    <p>Center</p>
                    <p class="le_menu_aHover">
                        <A href="#tabs2">Center Tab</A>
                    </p>
                </li>                
                <li class=" le_menu_shape_right le_menu_fgcolor">
                    <p>Right</p>
                    <p class="le_menu_aHover">
                        <A href="#tabs3">Right Tab</A>
                    </p>
                </li>                
            </ul>

CSS File
 .le_menu_fgcolor.ui-state-default {   
     background:#e40e7d;        
 }

 .le_menu_fgcolor.ui-state-hover {
     background:#ff0e7d;
 }

效果很好,我得到粉红色的默认颜色,当我将鼠标悬停在任何下拉元素上时,它们会变为稍微不同的粉红色阴影。

现在我想创建一个函数来事后更改配色方案:

JS/JQuery 函数 setMenuDropdownTabColor(defaultColor, hoverColor){

    $('.le_menu_fgcolor.ui-state-default').css('background', defaultColor);
    $('.le_menu_fgcolor.ui-state-hover').css('background', hoverColor);  

当我运行此函数时,默认状态会按预期更改为我传入的内容,但悬停变为与默认状态相同。如果我注释掉默认状态,悬停将被忽略,并正常使用其旧的粉红色值。如果我注释掉悬停状态,那么新的默认状态仍然会覆盖悬停属性。检查器视图很好地显示了覆盖颜色,但悬停颜色没有显示在任何地方,无论是否被覆盖(当我将鼠标悬停在选项卡上时,它确实显示正在计算 ui-state-hover 标签)

我提到的第一篇文章提出了一些建议

a) 在 css 上设置一个 !important。我在css中试过了,但没有效果

b) 覆盖 .hover 自身。我试过了:

$('.le_menu_fgcolor').css('background', '#FFFF00').hover;

还有一些排列,但它们完全覆盖了整个类的样式,而不仅仅是悬停。我猜原因是这只是css中的一个.hover,但我实际上覆盖了一个jquery库字段?

帖子说的是有道理的,事情正在内联,但我不明白为什么默认状态覆盖在这种情况下有效,或者为什么我在检查器的任何地方都看不到悬停的颜色

是的,我已经尝试关闭浏览器然后再打开。

有什么想法或建议吗?

【问题讨论】:

  • 你为什么不用 CSS?
  • 我按照我最初设置的方式进行操作,但 CSS 不会将变量作为值(至少不容易,这里的其他帖子一直建议不要尝试) .所以我在 CSS 中设置了默认主题,然后尝试使用 JS/JQuery 在其他主题之间切换
  • 嗯,好的,我已经回答了:)
  • (另外,我尝试使用的漂亮格式 - 从消息顶部的链接 - 使用 jquery 来调整它是如何进行下拉的。但是它似乎正在实现功能将 jquery 内部值用于 ui-states,并且这些值似乎会按照它们被触发的顺序覆盖 css)
  • 非常感谢和高兴你在我结束之前所做的一切,否则我会在早上醒来,跑到圣诞树前,看到这个问题的五个版本;)

标签: jquery css hover


【解决方案1】:

不要使用 jQuery 来执行简单的任务,例如在悬停时更改 CSS 属性,而是使用 CSS?

.le_menu_fgcolor:hover{
  background:#ffff00;
}

你可以像这样使用 jQuery:

$( ".le_menu_fgcolor" ).hover(
  function() {
    $( this ).css('background', '#FFFF00');
  }, function() {
    $( this ).css('background', '#FF0000');
  }
);

第二个function 是当您移开鼠标时发生的情况。

按照我认为你在 cmets 中的意思,你想要这样的东西:

$(document).ready(function(){

  //The styles you want to overwrite the CSS with
  $('.le_menu_fgcolor').css(
    {
      "background": "#ff0000",
      "color": "#000000",
      "height": "50px"
    }
  );

  //Hover styles

  $( ".le_menu_fgcolor" ).hover(
    function() {
      $( this ).css('background', '#FFFF00');
    }, function() {
      $( this ).css('background', '#FF0000');
    }
  );

});

【讨论】:

  • 刚试过,它似乎在不破坏其他脚本的情况下编辑它(摇摆!),虽然它似乎直到鼠标第一次悬停才生效?在页面初始化期间覆盖被取消,但页面以 css 默认颜色进入?
  • 有点困惑,抱歉!您的意思是您希望未悬停的样式最初出现在页面加载中吗?但是CSS被覆盖了? @DanielCazan
  • 所以理想情况下我想要的是,每当触发该功能时,页面上的所有颜色样式(包括悬停)都更改为新样式。目前该功能在.ready期间被触发,所以在css和一切都被初始化之后。目前一切都是粉红色的,直到我将鼠标悬停在这些东西上,你的代码就会启动并按预期将东西变成红色和黄色
  • 虽然如果我也通过该 jquery 行将默认值覆盖为与悬停后相同的东西,它似乎确实有效......所以放在一起它确实有效:) 我没有不知道它是否有效,但它有效,耶! (仍然很好奇为什么 jquery 覆盖没有,但工作代码是工作代码)
  • 完美,完全有效!再次感谢!我会回过头来弄清楚为什么 jquery 版本不起作用,因为我对这一切有了更多的经验,然后可能会在这里更新一些东西,但是很感谢你解开了,非常感谢!
【解决方案2】:
 $(".le_menu_fgcolor").hover(function(){
    $(this).css("background-color","#ff0e7d");
  })

【讨论】:

  • 谢谢拉希!遇到与 BeatAlex 相同的问题(不会立即覆盖初始 css),但在不破坏其他脚本的情况下也能正常工作:)
猜你喜欢
  • 2023-03-28
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多