`
bee1314
  • 浏览: 166520 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

简单地封装chosen支持option动态生成

 
阅读更多

为了美化select的显示效果,决定使用chosen来渲染体验。

 

因为页面中的select的option都是通过handlerbars动态的生成,所以导致options动态的改变时,chosen不能实时的刷新,停留在上一刻,影响用户体验。查询官方的api,只有通过$('#test').chosen('destroy').chosen();销毁一次再重建一次才可以正常的显示,但是如果这样写,导致页面到处是这样的垃圾代码-丑且脏, 因为有时还要判断出什么时候使用$('#test').chosen({})。于是写一个jquery的插件,来简单地封装下chosen地api,支持我们的场景。


/**
     * 到处是chosen和chosen('destroy').chosen?
     * 我们要思考root casuse?
     *   根本原因是因为使用handlerbars动态生成的select的内容
     *   导致chosen无法同步刷新,那我们为何不自己扩展呢?
     */
    (function($) {
        /**
         * 创建动态的chosen插件
         * --智能判断chosen有没有加载
         * @param param
         *    param为destroy就为销毁该chosen
         *    param为“”, 表示option不是动态的生成的,页面已经渲染了options
         *    其他的都是为动态生成的options html片段
         */
        $.fn.dynamicChosen = function(param) {
            //简单地设置chosen属性
            var opt = {
                disable_search_threshold: 10,
                no_results_text: ':),暂无匹配'
            };
            return this.each(function() {
                //得到当前的元素id,chosen的id会在元素的id基础上添加_chosen
                var id = $(this).prop('id');
                var $chosenId = $('#' + id + '_chosen');

                if (param == 'destroy') {
                    //如果没有渲染chosen,说明就是普通的select直接隐藏
                    if ($chosenId.length == 0) {
                        $(this).hide();
                    } else {
                        $(this).chosen('destroy').hide();
                    }
                } else {
                    //如果chosen没有在页面渲染
                    if ($chosenId.length == 0) {
                        //trim(param)说明option非动态生成
                        if ($.trim(param)) {
                            $(this).html(param).show().chosen(opt);
                        } else {
                            $(this).show().chosen(opt);
                        }

                    } else {
                        if ($.trim(param)) {
                            $(this).html(param).show().chosen('destroy').chosen(opt);
                        } else {
                            $(this).html(param).show().chosen('destroy').chosen(opt);
                        }
                    }
                }
            });
        }
    })(jQuery);
 

 

使用:
//销毁
$("#test").dynamicChosen('destroy')

//渲染已经存在的select和option
$("#test").dynamicChosen();

//动态的渲染
var tpl = function (templateId, data) {
        var template = Handlebars.compile($(templateId).html());
        return template(data);
    };

$("#test").dynamicChosen(tpl('#test-tpl', {list: {..}}));

 

 

分享到:
评论

相关推荐

    chosen(下拉框多选)

    它使得用户可以更方便地浏览大量选项,并且支持在输入时动态过滤结果。这种改进后的下拉框增强了用户体验,提高了用户在网页表单中的操作效率。 在`chosen.js`这个文件中,包含了Chosen库的主要JavaScript代码。这...

    chosen能搜索的输入框

    4. **多语言支持**:Chosen支持多种语言,方便构建面向全球用户的多语言网站。 5. **无障碍性**:考虑到无障碍性,Chosen遵循了WCAG(Web Content Accessibility Guidelines)标准,确保残障人士也能方便地使用。 ...

    chosen下拉选择插件.rar

    2. **分组选项**:对于有组织的选项,Chosen能够优雅地展示选项分组,使用户更容易理解和选择。 3. **多选支持**:Chosen支持多选模式,用户可以通过检查框来选择多个选项,同时显示已选项目的数量。 4. **响应式...

    chosen下拉多选

    5. **无障碍访问**:Chosen考虑到了无障碍访问需求,支持屏幕阅读器,使得残障人士也能方便地使用。 6. **兼容性**:Chosen与大部分现代浏览器兼容,包括Chrome、Firefox、Safari、Opera以及Internet Explorer 8及...

    jquery-chosen.js插件

    2. **动态更新**:如果需要在运行时动态添加或删除选项,需要先调用`$("#select").trigger("chosen:updated");`来更新Chosen的状态。 3. **自定义样式**:Chosen的外观可以通过修改CSS来定制,如改变选择框的宽度、...

    chosen jquery带搜索的下拉框简单整理

    5. **自定义配置**:Chosen支持多种配置参数,如`width`来调整下拉框宽度,`disable_search_threshold`来设定多少个选项后才显示搜索框等。 **五、实例分析** 在我们的案例中,"choosen"文件夹可能包含了Chosen的...

    Jquery select 插件 chosen

    Chosen插件通过增强select和option元素,提供了更美观、更易用的选择体验,尤其在处理大量选项时,其优势更为明显。 一、Chosen插件简介 Chosen插件是由Harvest公司开发的,它将普通的HTML select元素转换为一个...

    chosen.jquery带搜索功能的下拉选

    2. **自定义渲染**:"带有渲染js之后刷新option"表明Chosen.jQuery支持对选项进行动态更新和渲染。这在数据实时变化或者需要根据用户操作动态加载更多选项的场景中非常有用。通过JavaScript,我们可以轻松地添加、...

    下拉框美化插件chosen

    此外,Chosen还提供了一套API,允许开发者动态地添加、删除或修改下拉框选项,以及获取用户的选择状态。 6. **无障碍访问**: Chosen考虑到了无障碍访问的需求,确保键盘导航和屏幕阅读器的兼容性。这样,即使是对...

    Jquery chosen动态设置值实例介绍

    https://github.com/harvesthq/chosen 一款选择插件,支持检索,多选,但不支持输入效果如下图 确定是用的这个哦, 不然可往下看也没有什么意义了 突然发现如果用在省市选择发现有如下问题: 1,不能动态设置值 2,...

    jquery chosen

    **jQuery Chosen插件详解** `jQuery Chosen`是一个优秀的jQuery插件,专门用于改进HTML `<select>`元素...结合良好的文档和示例,开发者可以轻松地掌握并应用`jQuery Chosen`插件,为网页添加专业级别的下拉菜单功能。

    chosen多选select

    总的来说,Chosen库极大地改善了传统select元素的用户体验,提供了丰富的配置选项和友好的API,使得开发者可以轻松地在项目中集成这一功能。通过理解和利用这些文件,你可以更好地掌握Chosen的使用,并将其有效地...

    Chosen资源

    3. **多选支持**:Chosen 支持单选和多选模式,用户可以方便地勾选多个选项,同时显示已选项目的数量。 4. **可配置性**:开发者可以根据需求调整Chosen的行为,比如设置搜索阈值、禁用某些功能等。 5. **无障碍...

    chosen_v1.8.7.rar

    《Chosen v1.8.7:打造高效可搜索下拉框》 Chosen是一款流行的...总的来说,Chosen v1.8.7是一个强大的工具,能够极大地改善SELECT元素的用户体验。通过合理的配置和优化,可以使其在各种场景下都能表现出色。

    chosen插件的源代码

    Chosen的主要目标是通过提供一个可搜索、可折叠和可自定义样式的下拉框,使用户能够更轻松地浏览和选择选项。它支持单选和多选模式,使得在大量选项中进行选择变得更加直观。Chosen通过动态创建一个交互式的列表来...

    下拉框搜索chosen_v1.6.2.rar

    7. **API接口**:Chosen提供了丰富的API接口,开发者可以方便地控制插件的行为,如动态添加或删除选项,获取选中的值等。 在实际应用中,Chosen常用于表单设计,尤其是涉及分类选择、地区选择、兴趣爱好选择等场景...

    chosen jquery 下拉查询插件

    "Chosen jQuery 下拉查询插件"是一款广泛应用于网页开发中的选择框增强工具,它能够极大地提升用户体验,尤其是在处理大量选项时。Chosen 主要针对传统的HTML `<select>`元素进行优化,提供了搜索功能、多选支持以及...

    chosen增强化使用

    4. **事件处理**:为了更好地响应用户的操作,Chosen增强版可能扩展了更多的事件,比如选择项改变、下拉框展开和关闭等,这样开发者可以更容易地监听和响应这些事件。 5. **兼容性与适应性**:考虑到不同浏览器的...

    jquery-chosen

    这个插件的主要目标是通过简单的API,让开发者能够轻松地将普通的下拉框转变为功能丰富的多选或单选组件,提升用户在网页交互中的体验。 ### 功能特性 1. **搜索功能**:Chosen插件支持在下拉选项中实时搜索,使得...

Global site tag (gtag.js) - Google Analytics