123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- /**
- * YvanUI
- *
- * Copyright (c) 2018 www.yvanui.com. All rights reserved.
- * @author luoyifan@qq.com
- * @time 2018-11-27 11:16:00
- */
- (function ($) {
- var idx = 1;
- function createBox(target) {
- //_2
- var $group = $('<div class="checkgroup-container"></div>');
- $(target).append($group);
- return $group;
- }
- function init(target) {
- var state = $.data(target, "checkgroup");
- var opts = state.options;
- var $group = state.group;
- var id = '_checkgroup_' + (++idx);
- $group.attr('id', id);
- if (opts.label) {
- if ($.type(opts.label) === 'object') {
- state.label = $(opts.label);
- state.label.attr("for", $group);
- } else {
- $(state.label).remove();
- state.label = $("<label class=\"textbox-label\"></label>").html(opts.label);
- state.label.css("textAlign", opts.labelAlign).attr("for", id);
- if (opts.labelPosition === "after") {
- state.label.insertAfter($group);
- } else {
- state.label.insertBefore($group);
- }
- state.label.removeClass("textbox-label-left textbox-label-right textbox-label-top");
- state.label.addClass("textbox-label-" + opts.labelPosition);
- }
- } else {
- $(state.label).remove();
- }
- var data = opts.data;
- if ($.type(data) === 'function') {
- data = data.call(this);
- }
- if ($.type(data) === 'object') {
- data = [];
- for (var name in opts.data) {
- if (!opts.data.hasOwnProperty(name)) continue;
- var item = {};
- item[opts.idValue || 'value'] = name;
- item[opts.textValue || 'label'] = opts.data[name];
- data.push(data);
- }
- } else if ($.type(opts.data) === 'array') {
- data = opts.data;
- }
- if (data) {
- for (var i = 0; i < data.length; i++) {
- var $dom = $('<input type="checkbox" name="' + opts.name + '"/>');
- $group.append($dom);
- var extend = {};
- if (opts.idValue) {
- extend.value = data[i][opts.idValue];
- }
- if (opts.textValue) {
- extend.label = data[i][opts.textValue];
- }
- $dom.checkbox($.extend({}, data[i], extend));
- }
- }
- }
- function resizeLabel(target) {
- var state = $.data(target, "checkgroup");
- var opts = state.options;
- var $dom = state.group;
- $dom._size(opts, $dom.parent());
- if (opts.label && opts.labelPosition) {
- if (opts.labelPosition === "top") {
- state.label._size({ width: opts.labelWidth }, $dom);
- } else {
- state.label._size({ width: opts.labelWidth, height: 'auto' }, $dom);
- state.label.css("float", "left");
- state.label.css("padding-top", "10px");
- }
- }
- }
- $.fn.checkgroup = function (options, param) {
- if (typeof options === 'string') {
- return $.fn.checkgroup.methods[options](this, param);
- }
- options = options || {};
- return this.each(function () {
- var state = $.data(this, 'checkgroup');
- if (state) {
- $.extend(state.options, options);
- } else {
- $.data(this, 'checkgroup', {
- options: $.extend({}, $.fn.checkgroup.defaults, options),
- group: createBox(this)
- });
- }
- init(this);
- resizeLabel(this);
- });
- };
- $.fn.checkgroup.methods = {
- options: function (jq) {
- var opts = jq.data("checkbox");
- return $.extend(opts.options, { value: opts.checkbox.find(".checkbox-value").val() });
- }, checkAll: function (jq) {
- return jq.each(function () {
- setValue(this, true);
- });
- }, uncheckAll: function (jq) {
- return jq.each(function () {
- setValue(this, false);
- });
- }, clear: function (jq) {
- return jq.each(function () {
- setValue(this, false);
- });
- }, reset: function (jq) {
- return jq.each(function () {
- var opts = $(this).checkbox("options");
- setValue(this, opts.originalValue);
- });
- }
- };
- $.fn.checkgroup.defaults = {
- value: null,
- primary: true,
- label: null,
- data: [],
- labelPosition: 'before',
- labelAlign: 'right',
- width: 280,
- labelWidth: 90,
- idValue: 'id',
- textValue: 'text',
- onChange: function (value) {
- }
- };
- })(jQuery);
|