yvanui.checkgroup.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /**
  2. * YvanUI
  3. *
  4. * Copyright (c) 2018 www.yvanui.com. All rights reserved.
  5. * @author luoyifan@qq.com
  6. * @time 2018-11-27 11:16:00
  7. */
  8. (function ($) {
  9. var idx = 1;
  10. function createBox(target) {
  11. //_2
  12. var $group = $('<div class="checkgroup-container"></div>');
  13. $(target).append($group);
  14. return $group;
  15. }
  16. function init(target) {
  17. var state = $.data(target, "checkgroup");
  18. var opts = state.options;
  19. var $group = state.group;
  20. var id = '_checkgroup_' + (++idx);
  21. $group.attr('id', id);
  22. if (opts.label) {
  23. if ($.type(opts.label) === 'object') {
  24. state.label = $(opts.label);
  25. state.label.attr("for", $group);
  26. } else {
  27. $(state.label).remove();
  28. state.label = $("<label class=\"textbox-label\"></label>").html(opts.label);
  29. state.label.css("textAlign", opts.labelAlign).attr("for", id);
  30. if (opts.labelPosition === "after") {
  31. state.label.insertAfter($group);
  32. } else {
  33. state.label.insertBefore($group);
  34. }
  35. state.label.removeClass("textbox-label-left textbox-label-right textbox-label-top");
  36. state.label.addClass("textbox-label-" + opts.labelPosition);
  37. }
  38. } else {
  39. $(state.label).remove();
  40. }
  41. var data = opts.data;
  42. if ($.type(data) === 'function') {
  43. data = data.call(this);
  44. }
  45. if ($.type(data) === 'object') {
  46. data = [];
  47. for (var name in opts.data) {
  48. if (!opts.data.hasOwnProperty(name)) continue;
  49. var item = {};
  50. item[opts.idValue || 'value'] = name;
  51. item[opts.textValue || 'label'] = opts.data[name];
  52. data.push(data);
  53. }
  54. } else if ($.type(opts.data) === 'array') {
  55. data = opts.data;
  56. }
  57. if (data) {
  58. for (var i = 0; i < data.length; i++) {
  59. var $dom = $('<input type="checkbox" name="' + opts.name + '"/>');
  60. $group.append($dom);
  61. var extend = {};
  62. if (opts.idValue) {
  63. extend.value = data[i][opts.idValue];
  64. }
  65. if (opts.textValue) {
  66. extend.label = data[i][opts.textValue];
  67. }
  68. $dom.checkbox($.extend({}, data[i], extend));
  69. }
  70. }
  71. }
  72. function resizeLabel(target) {
  73. var state = $.data(target, "checkgroup");
  74. var opts = state.options;
  75. var $dom = state.group;
  76. $dom._size(opts, $dom.parent());
  77. if (opts.label && opts.labelPosition) {
  78. if (opts.labelPosition === "top") {
  79. state.label._size({ width: opts.labelWidth }, $dom);
  80. } else {
  81. state.label._size({ width: opts.labelWidth, height: 'auto' }, $dom);
  82. state.label.css("float", "left");
  83. state.label.css("padding-top", "10px");
  84. }
  85. }
  86. }
  87. $.fn.checkgroup = function (options, param) {
  88. if (typeof options === 'string') {
  89. return $.fn.checkgroup.methods[options](this, param);
  90. }
  91. options = options || {};
  92. return this.each(function () {
  93. var state = $.data(this, 'checkgroup');
  94. if (state) {
  95. $.extend(state.options, options);
  96. } else {
  97. $.data(this, 'checkgroup', {
  98. options: $.extend({}, $.fn.checkgroup.defaults, options),
  99. group: createBox(this)
  100. });
  101. }
  102. init(this);
  103. resizeLabel(this);
  104. });
  105. };
  106. $.fn.checkgroup.methods = {
  107. options: function (jq) {
  108. var opts = jq.data("checkbox");
  109. return $.extend(opts.options, { value: opts.checkbox.find(".checkbox-value").val() });
  110. }, checkAll: function (jq) {
  111. return jq.each(function () {
  112. setValue(this, true);
  113. });
  114. }, uncheckAll: function (jq) {
  115. return jq.each(function () {
  116. setValue(this, false);
  117. });
  118. }, clear: function (jq) {
  119. return jq.each(function () {
  120. setValue(this, false);
  121. });
  122. }, reset: function (jq) {
  123. return jq.each(function () {
  124. var opts = $(this).checkbox("options");
  125. setValue(this, opts.originalValue);
  126. });
  127. }
  128. };
  129. $.fn.checkgroup.defaults = {
  130. value: null,
  131. primary: true,
  132. label: null,
  133. data: [],
  134. labelPosition: 'before',
  135. labelAlign: 'right',
  136. width: 280,
  137. labelWidth: 90,
  138. idValue: 'id',
  139. textValue: 'text',
  140. onChange: function (value) {
  141. }
  142. };
  143. })(jQuery);