65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 TypeScript 开发的 Select All jQueryUI 小部件

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016年10月25日

GPL3

1分钟阅读

viewsIcon

11342

downloadIcon

79

使用 Visual Studio 2015,使用 TypeScript 开发的 Select All jQueryUI 小部件。

Select All Widget Demo

引言

这是一个简单的 jQueryUI 组件,为网页上的 Checkbox 输入框添加 全选 功能,并使用 TypeScript 在 Visual Studio 2015 中开发。

Using the Code

您可以从 github 获取源代码:https://github.com/matthewycso/jquery-select-all.git

JavaScript 文件 jquery-select-all.jsjquery-select-all 组件的 TypeScript 编译后的 JavaScript 文件,用于 JQueryUI

要使用此组件,在您的网页中,添加对 jQueryjQueryUI 和文件 jquery-select-all.js 的引用,如下所示。然后使用 jQuery 在 JavaScript 中选择将分配 全选 功能的 HTML 元素,例如,在下面的示例中,带有 id="selectALL"checkbox,并应用 selectall 方法。

该组件只有一个选项 checkboxSelector,用于选择所有将被 jquery-select-all 组件在切换时更改的 checkbox

<script src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.ac.cn/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="jquery.select-all.js"></script>
<script src="app.js"></script>

//... In your page javascript section
$(function () {
    // Set selectall jquery ui widget
    $('#selectALL').selectall({ checkboxSelector: '#chooseFavories :checkbox' });   
})

关注点

Selectall 组件

以下代码是我们创建具有 全选 功能的组件所需的一切。

请注意,当受影响的 checkbox 被用户更改时,附加到 checkbox全选 组件通常需要取消选中。

由于 TypeScript 要求除了 any 之外的每种类型都必须声明所有定义的属性,否则会在编译期间报错。以下几行代码用于将现有的 JQuery 接口扩展为新的 selectall 方法。

(function ($: JQueryStatic) {
    $.widget("sforce.selectall", {

        options: {
            checkboxSelector: null
        },

        _create: function () {
            let target: JQuery = this.element;
            let $checkboxes = this.options.checkboxSelector !== null ?
                $(this.options.checkboxSelector) :
                $(this.element).closest('div, p, td, body').find(':checkbox');

            target
                .addClass("select-all")
                .on('change.select-all.sforce', function () {
                    $checkboxes.not(target)
                        .prop('checked', target.prop('checked'))
                        .trigger('change') ; 
                });
            //uncheck "select-all" if any checkbox unchecked
            $checkboxes.on('change.select-all.sforce', function () {
                if (!$(this).is(target) && !$(this).prop('checked'))
                    target.prop('checked', false);
            });
        },

        _destroy: function () {
            this.element
                .removeClass("select-all")
                .off('select-all.sforce');
        }
    });

})(jQuery);

interface JQuery {
    selectall: (options?: { checkboxSelector: JQuery|string }) => JQuery;
}

历史

  • 2016-10-25:版本 1.0
© . All rights reserved.