IE select option竟然不支持display样式解决方法

时间:2018-08-20
本文章向大家介绍IE select option竟然不支持display样式解决方法,需要的朋友可以参考一下

万恶的IE,option竟然不支持display样式,想到的解决思路有二个:

  1、ajax联动查询

  2、jQuery的remove()、after()方法

方法1的不好之处是初始页面,需要显示全部IP,本来已经从后台查询了一次,如果再利用ajax,会给服务器造成压力,所以采用方法2。

后台code

// 获取所有平台类型IP
$vcenter_ip = $this->vcenter_mgr->get_vcenter_info(null, null, 'ip, virt_type', 'INET_ATON(ip)');
$virt_ip = array();
if (!empty($vcenter_ip)) {
   foreach ($vcenter_ip as $arr) {
        $virt_ip[]= array(
            'virt_type' => $arr['virt_type'],
            'virt_ip' => $arr['ip'],
        );
    }
}
exit(json_encode($virt_ip));

前端code

// 初始时显示所有IP
var virt_ip_obj = <?= $virt_ip ?>; // 后台返回的json数据
var virt_ip_opt = '';
if (virt_ip_obj.length > 0) {
    $.each(virt_ip_obj, function(index, val) {
        virt_ip_opt += '<option class="ip_opt" value="'+val.virt_ip+'">'+val.virt_ip+'</option>';
    });
}
$('.virt_ip option:first').after(virt_ip_opt);

// change事件
$('.adv-table').on('change', '.tts-options', function(event) {
    var virt_type = $(this).val();
    $('select .ip_opt').remove(); // 移除所有option项
    if (virt_type > 0) {
        var new_ip_opt = '';
        if (virt_ip_obj.length > 0) {
            $.each(virt_ip_obj, function(i, arr) {
                if (arr.virt_type === virt_type) {
                    new_ip_opt += '<option class="ip_opt" value="'+arr.virt_ip+'">'+arr.virt_ip+'</option>';
                }
            });
        }
        $('.virt_ip option:first').after(new_ip_opt); // 选择指定平台时只显示指定平台下的所有IP
    } else {
        $('.virt_ip option:first').after(virt_ip_opt); // 选择所有平台时,显示全部IP
    }
});