/** * 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 = $('
'); $(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 = $("").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 = $(''); $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);