JavaScript + jQuery + HTML 实现select效果:选中、取消选中,普通方法Chrome会有BUG

HTML option 标签的 selected 属性
http://www.w3school.com.cn/tags/att_option_selected.asp

1、一般做WEB的时候,Chrome的兼容性会比较好,但是这里有个特殊的情况,下面的方法,Chrome会有问题。
Chrome版本:版本67.0.3371.0(正式版本) (32 位)

效果图
这里写图片描述

反例如下:(Chrome连续点击resetOption、setOption、resetOption、setOption就会出现问题)

<!DOCTYPE html>
<html>
<head>
<script src="/jquery/jquery-1.11.1.min.js"></script>
<script>
    //取消选中
    function resetOption(id) {
        $('#' + id).find("option").each(function() {
            $(this).removeAttr("selected");
        });
    }
    // 选中。这里强调的是:Chrome的BUG(版本67.0.3371.0(正式版本) (32 位))
    function setOption(id, optionID) {
        if (optionID == null) {
            return;
        }
        $('#' + id).find("option").each(function() {
            if ($(this).val() == optionID) {
                $(this).attr("selected", "selected");
            }
        });
    }
</script>
</head>

<body>

    <div>
        <select id="selectID">
            <option value='0'></option>
            <option value='1'>Volvo</option>
            <option value='2' selected="selected">Saab</option>
            <option value='3'>Mercedes</option>
            <option value='4'>Audi</option>
        </select>
        <button type="button" onClick="resetOption('selectID')">resetOption</button>
        <button type="button" onClick="setOption('selectID', '1')">setOption</button>
    </div>

</body>
</html>

正例,推荐以下方法:

<!DOCTYPE html>
<html>
<head>
<script src="/jquery/jquery-1.11.1.min.js"></script>
<script>
    //取消选中
    function resetOption(id) {
        $('#' + id).find("option").each(function() {
            $(this).removeAttr("selected");
        });
    }
    // 选中。--------------------------这部分代码不同
    function setOption(selectID) {
        var data = [ {
            id : '0',
            name : ''
        }, {
            id : '1',
            name : 'Volvo'
        }, {
            id : '2',
            name : 'Saab'
        }, {
            id : '3',
            name : 'Mercedes'
        }, {
            id : '4',
            name : 'Audi'
        } ];
        // default value
        var id = 'id';
        var name = 'name';
        // empty value
        var option = '<option value="0"></option>';
        // other value
        for ( var i in data) {
            if (selectID != undefined && data[i][id] == selectID) {
                option += '<option value="' + data[i][id] + '" selected="selected" >' + data[i][name] + '</option>';
                continue;
            }
            option += '<option value="' + data[i][id] + '">' + data[i][name] + '</option>';
        }
        $('#selectID').html(option);
    }
</script>
</head>

<body>

    <div>
        <select id="selectID">
            <option value='0'></option>
            <option value='1'>Volvo</option>
            <option value='2' selected="selected">Saab</option>
            <option value='3'>Mercedes</option>
            <option value='4'>Audi</option>
        </select>
        <button type="button" onClick="resetOption('selectID')">resetOption</button>
        <button type="button" onClick="setOption('1')">setOption</button>
    </div>

</body>
</html>

2、测试地址(把上面的代码贴进去,提交代码,右侧就会出现效果)
http://www.w3school.com.cn/tiy/t.asp?f=jquery_hide

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值