multiple_select.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. $(document).ready(function () {
  2. $(document).on("click", ".MultiCheckBox", function () {
  3. var detail = $(this).next();
  4. detail.show();
  5. });
  6. $(document).on("click", ".MultiCheckBoxDetailHeader input", function (e) {
  7. e.stopPropagation();
  8. var hc = $(this).prop("checked");
  9. $(this).closest(".MultiCheckBoxDetail").find(".MultiCheckBoxDetailBody input").prop("checked", hc);
  10. $(this).closest(".MultiCheckBoxDetail").next().UpdateSelect();
  11. });
  12. $(document).on("click", ".MultiCheckBoxDetailHeader", function (e) {
  13. var inp = $(this).find("input");
  14. var chk = inp.prop("checked");
  15. inp.prop("checked", !chk);
  16. $(this).closest(".MultiCheckBoxDetail").find(".MultiCheckBoxDetailBody input").prop("checked", !chk);
  17. $(this).closest(".MultiCheckBoxDetail").next().UpdateSelect();
  18. });
  19. $(document).on("click", ".MultiCheckBoxDetail .cont input", function (e) {
  20. e.stopPropagation();
  21. $(this).closest(".MultiCheckBoxDetail").next().UpdateSelect();
  22. var val = ($(".MultiCheckBoxDetailBody input:checked").length == $(".MultiCheckBoxDetailBody input").length)
  23. $(".MultiCheckBoxDetailHeader input").prop("checked", val);
  24. });
  25. $(document).on("click", ".MultiCheckBoxDetail .cont", function (e) {
  26. var inp = $(this).find("input");
  27. var chk = inp.prop("checked");
  28. inp.prop("checked", !chk);
  29. var multiCheckBoxDetail = $(this).closest(".MultiCheckBoxDetail");
  30. var multiCheckBoxDetailBody = $(this).closest(".MultiCheckBoxDetailBody");
  31. multiCheckBoxDetail.next().UpdateSelect();
  32. var val = ($(".MultiCheckBoxDetailBody input:checked").length == $(".MultiCheckBoxDetailBody input").length)
  33. $(".MultiCheckBoxDetailHeader input").prop("checked", val);
  34. });
  35. $(document).mouseup(function (e) {
  36. var container = $(".MultiCheckBoxDetail");
  37. if (!container.is(e.target) && container.has(e.target).length === 0) {
  38. container.hide();
  39. }
  40. });
  41. });
  42. var defaultMultiCheckBoxOption = { width: '220px', defaultText: 'Select Below', height: '200px' };
  43. jQuery.fn.extend({
  44. CreateMultiCheckBox: function (options) {
  45. var localOption = {};
  46. localOption.width = (options != null && options.width != null && options.width != undefined) ? options.width : defaultMultiCheckBoxOption.width;
  47. localOption.defaultText = (options != null && options.defaultText != null && options.defaultText != undefined) ? options.defaultText : defaultMultiCheckBoxOption.defaultText;
  48. localOption.height = (options != null && options.height != null && options.height != undefined) ? options.height : defaultMultiCheckBoxOption.height;
  49. this.hide();
  50. this.attr("multiple", "multiple");
  51. var divSel = $("<div class='MultiCheckBox'>" + localOption.defaultText + "<span class='k-icon k-i-arrow-60-down'><svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='sort-down' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' class='svg-inline--fa fa-sort-down fa-w-10 fa-2x'><path fill='currentColor' d='M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z' class=''></path></svg></span></div>").insertBefore(this);
  52. divSel.css({ "width": localOption.width });
  53. var detail = $("<div class='MultiCheckBoxDetail'><div class='MultiCheckBoxDetailHeader'><input type='checkbox' class='mulinput' value='-1982' /><div>Select All</div></div><div class='MultiCheckBoxDetailBody'></div></div>").insertAfter(divSel);
  54. detail.css({ "width": parseInt(options.width) + 10, "max-height": localOption.height });
  55. var multiCheckBoxDetailBody = detail.find(".MultiCheckBoxDetailBody");
  56. this.find("option").each(function () {
  57. var val = $(this).attr("value");
  58. if (val == undefined)
  59. val = '';
  60. multiCheckBoxDetailBody.append("<div class='cont'><div><input type='checkbox' class='mulinput' value='" + val + "' /></div><div>" + $(this).text() + "</div></div>");
  61. });
  62. multiCheckBoxDetailBody.css("max-height", (parseInt($(".MultiCheckBoxDetail").css("max-height")) - 28) + "px");
  63. },
  64. UpdateSelect: function () {
  65. var arr = [];
  66. this.prev().find(".mulinput:checked").each(function () {
  67. arr.push($(this).val());
  68. });
  69. this.val(arr);
  70. },
  71. });