jquery - 打开时突出显示带有类的选择/下拉列表,或者具有除初始默认选择之外的选项

标签 jquery html css

好吧,这听起来 super 简单!!但它让我发疯,让我大脑衰退:)

假设我有一个基本的选择框,例如:

<select id="test">
    <option value="">--- select ---</option>
    <option value="1">One</option>
    <option value="1">Two</option>
</select>

我希望在以下状态下将“突出显示”类添加到选择中:

  1. 选择处于下拉/打开状态
  2. select 选择了一个有效的选项(即一个或两个)

但是如果选择在没有有效选择的情况下被关闭(即它变回“---选择---”),则需要删除该类

听起来很简单!!

我试过这似乎是显而易见的方法:

$(document).ready(function () {

    $('#test').focus(function () {
        $(this).addClass('highlight');
    })

    $('#test').change(function () {
        if ($(this).val() != '') $(this).addClass('highlight');
        else $(this).removeClass('highlight');
    })
});

但它并没有完全 100% 工作,但它很接近,问题是如果你选择一些东西然后将它改回“---选择---”但是你不会失去下拉菜单的焦点并且重新单击它然后它不会再次添加“突出显示”类。

我已经尝试了很多添加额外事件的组合,比如点击,但我似乎无法让它完全按照我想要的方式工作。这几乎就像我需要在选择上有一个“打开”事件,但显然它不存在。

我在这里错过了一些非常明显的东西吗?因为我是一名称职的网络开发人员,已经花了几个小时来尝试做到这一点!!哈哈...但是在新西兰已经很晚了,所以如果我有的话,这就是我的借口:)

谢谢,卡尔

最佳答案

$('select').on('focus', function() {
    $(this).addClass('highlight').find('option').css('color', '#000');
}).on('blur', function() {
    $(this).removeClass('highlight');
    if (this.value.length) $(this).addClass('highlight');
}).on('change', function() {
    if (this.value.length) $(this).addClass('highlight');
    else $(this).removeClass('highlight')
});​
​

DEMO

关于jquery - 打开时突出显示带有类的选择/下拉列表,或者具有除初始默认选择之外的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599167/

相关文章:

html - 为什么当我添加 <a> 标签时图像大小会为我重置

javascript - 为什么 jQuery 事件在我使用由 jQuery 生成的类时不起作用

c# - 跨域使用ajax无法传递参数

html - div 在另一个 div 下

javascript - 如何使用 CSS 在 AngularJS 中换行文本?

html - 隐藏位置为 : fixed property 的 div 上的滚动条

html - 填充 Bootstrap 缩略图

javascript - 如何在不刷新页面或更改 url 的情况下加载不同的 html 页面?

PHP 在 if 条件下添加数据可见

jQuery:取消设置/删除函数事件的最佳实践?