Просмотр файла templates/web_default/js/jquery.selectbox.js

Размер файла: 4.92Kb
  1. /*
  2. * jQuery SelectBox Styler v1.0.1
  3. * http://dimox.name/styling-select-boxes-using-jquery-css/
  4. *
  5. * Copyright 2012 Dimox (http://dimox.name/)
  6. * Released under the MIT license.
  7. *
  8. * Date: 2012.10.07
  9. *
  10. */
  11.  
  12. (function($) {
  13. $.fn.selectbox = function() {
  14. $(this).each(function() {
  15. var select = $(this);
  16. if (select.prev('span.selectbox').length < 1) {
  17. function doSelect() {
  18. var option = select.find('option');
  19. var optionSelected = option.filter(':selected');
  20. var optionText = option.filter(':first').text();
  21. if (optionSelected.length) optionText = optionSelected.text();
  22. var ddlist = '';
  23. for (i = 0; i < option.length; i++) {
  24. var selected = '';
  25. var disabled = ' class="disabled"';
  26. if (option.eq(i).is(':selected')) selected = ' class="selected sel"';
  27. if (option.eq(i).is(':disabled')) selected = disabled;
  28. ddlist += '<li' + selected + '>'+ option.eq(i).text() +'</li>';
  29. }
  30. var selectbox =
  31. $('<span class="selectbox" style="display:inline-block;position:relative">'+
  32. '<div class="select" style="float:left;position:relative;z-index:10000"><div class="text">' + optionText + '</div>'+
  33. '<b class="trigger"><i class="arrow"></i></b>'+
  34. '</div>'+
  35. '<div class="dropdown" style="position:absolute;z-index:9999;overflow:auto;overflow-x:hidden;list-style:none">'+
  36. '<ul>' + ddlist + '</ul>'+
  37. '</div>'+
  38. '</span>');
  39. select.before(selectbox).css({position: 'absolute', top: -9999});
  40. var divSelect = selectbox.find('div.select');
  41. var divText = selectbox.find('div.text');
  42. var dropdown = selectbox.find('div.dropdown');
  43. var li = dropdown.find('li');
  44. var selectHeight = selectbox.outerHeight();
  45. if (dropdown.css('left') == 'auto') dropdown.css({left: 0});
  46. if (dropdown.css('top') == 'auto') dropdown.css({top: selectHeight});
  47. var liHeight = li.outerHeight();
  48. var position = dropdown.css('top');
  49. dropdown.hide();
  50. /* при клике на псевдоселекте */
  51. divSelect.click(function() {
  52. /* умное позиционирование */
  53. var topOffset = selectbox.offset().top;
  54. var bottomOffset = $(window).height() - selectHeight - (topOffset - $(window).scrollTop());
  55. if (bottomOffset < 0 || bottomOffset < liHeight * 6) {
  56. dropdown.height('auto').css({top: 'auto', bottom: position});
  57. if (dropdown.outerHeight() > topOffset - $(window).scrollTop() - 20 ) {
  58. dropdown.height(Math.floor((topOffset - $(window).scrollTop() - 20) / liHeight) * liHeight);
  59. }
  60. } else if (bottomOffset > liHeight * 6) {
  61. dropdown.height('auto').css({bottom: 'auto', top: position});
  62. if (dropdown.outerHeight() > bottomOffset - 20 ) {
  63. dropdown.height(Math.floor((bottomOffset - 20) / liHeight) * liHeight);
  64. }
  65. }
  66. $('span.selectbox').css({zIndex: 1}).removeClass('focused');
  67. selectbox.css({zIndex: 2});
  68. if (dropdown.is(':hidden')) {
  69. $('div.dropdown:visible').hide();
  70. dropdown.show();
  71. } else {
  72. dropdown.hide();
  73. }
  74. return false;
  75. });
  76. /* при наведении курсора на пункт списка */
  77. li.hover(function() {
  78. $(this).siblings().removeClass('selected');
  79. });
  80. var selectedText = li.filter('.selected').text();
  81. /* при клике на пункт списка */
  82. li.filter(':not(.disabled)').click(function() {
  83. var liText = $(this).text();
  84. if ( selectedText != liText ) {
  85. $(this).addClass('selected sel').siblings().removeClass('selected sel');
  86. option.removeAttr('selected').eq($(this).index()).attr('selected', true);
  87. selectedText = liText;
  88. divText.text(liText);
  89. select.change();
  90. }
  91. dropdown.hide();
  92. });
  93. dropdown.mouseout(function() {
  94. dropdown.find('li.sel').addClass('selected');
  95. });
  96. /* фокус на селекте */
  97. select.focus(function() {
  98. $('span.selectbox').removeClass('focused');
  99. selectbox.addClass('focused');
  100. })
  101. /* меняем селект с клавиатуры */
  102. .keyup(function() {
  103. divText.text(option.filter(':selected').text());
  104. li.removeClass('selected sel').eq(option.filter(':selected').index()).addClass('selected sel');
  105. });
  106. /* прячем выпадающий список при клике за пределами селекта */
  107. $(document).on('click', function(e) {
  108. if (!$(e.target).parents().hasClass('selectbox')) {
  109. dropdown.hide().find('li.sel').addClass('selected');
  110. selectbox.removeClass('focused');
  111. }
  112. });
  113. }
  114. doSelect();
  115. // обновление при динамическом изменении
  116. select.on('refresh', function() {
  117. select.prev().remove();
  118. doSelect();
  119. })
  120. }
  121. });
  122. }
  123. })(jQuery)