ZZDianXin_UI - 郑州电信 演示

jquery.select.js 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. (function($) {
  2. $.selectSuggest = function(target, data, itemSelectFunction) {
  3. var defaulOption = {
  4. suggestMaxHeight: '200px',//弹出框最大高度
  5. itemColor : '#000000',//默认字体颜色
  6. itemBackgroundColor:'RGB(241, 229, 229)',//默认背景颜色
  7. itemOverColor : '#ffffff',//选中字体颜色
  8. itemOverBackgroundColor : '#C9302C',//选中背景颜色
  9. itemPadding : 3 ,//item间距
  10. fontSize : 12 ,//默认字体大小
  11. alwaysShowALL : true //点击input是否展示所有可选项
  12. };
  13. var maxFontNumber = 0;//最大字数
  14. var currentItem;
  15. var suggestContainerId = target + "-suggest";
  16. var suggestContainerWidth = $('#' + target).innerWidth();
  17. var suggestContainerLeft = $('#' + target).offset().left;
  18. var suggestContainerTop = $('#' + target).offset().top + $('#' + target).outerHeight();
  19. var showClickTextFunction = function() {
  20. $('#' + target).val(this.innerText);
  21. currentItem = null;
  22. $('#' + suggestContainerId).hide();
  23. }
  24. var suggestContainer;
  25. if ($('#' + suggestContainerId)[0]) {
  26. suggestContainer = $('#' + suggestContainerId);
  27. suggestContainer.empty();
  28. } else {
  29. suggestContainer = $('<div></div>'); //创建一个子<div>
  30. }
  31. suggestContainer.attr('id', suggestContainerId);
  32. suggestContainer.attr('tabindex', '0');
  33. suggestContainer.hide();
  34. var _initItems = function(items) {
  35. suggestContainer.empty();
  36. for (var i = 0; i < items.length; i++) {
  37. if(items[i].length > maxFontNumber){
  38. maxFontNumber = items[i].length;
  39. }
  40. var suggestItem = $('<div></div>'); //创建一个子<div>
  41. suggestItem.attr('id', items[i].id);
  42. suggestItem.append(items[i]);
  43. suggestItem.css({
  44. 'padding':defaulOption.itemPadding + 'px',
  45. 'white-space':'nowrap',
  46. 'cursor': 'pointer',
  47. 'background-color': defaulOption.itemBackgroundColor,
  48. 'color': defaulOption.itemColor
  49. });
  50. suggestItem.bind("mouseover",
  51. function() {
  52. $(this).css({
  53. 'background-color': defaulOption.itemOverBackgroundColor,
  54. 'color': defaulOption.itemOverColor
  55. });
  56. currentItem = $(this);
  57. });
  58. suggestItem.bind("mouseout",
  59. function() {
  60. $(this).css({
  61. 'background-color': defaulOption.itemBackgroundColor,
  62. 'color': defaulOption.itemColor
  63. });
  64. currentItem = null;
  65. });
  66. suggestItem.bind("click", showClickTextFunction);
  67. suggestItem.bind("click", itemSelectFunction);
  68. suggestItem.appendTo(suggestContainer);
  69. suggestContainer.appendTo(document.body);
  70. }
  71. }
  72. var inputChange = function() {
  73. var inputValue = $('#' + target).val();
  74. inputValue = inputValue.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
  75. var matcher = new RegExp(inputValue, "i");
  76. return $.grep(data,
  77. function(value) {
  78. return matcher.test(value);
  79. });
  80. }
  81. $('#' + target).bind("keyup",
  82. function() {
  83. _initItems(inputChange());
  84. });
  85. $('#' + target).bind("blur",
  86. function() {
  87. if(!$('#' + suggestContainerId).is(":focus")){
  88. $('#' + suggestContainerId).hide();
  89. if (currentItem) {
  90. currentItem.trigger("click");
  91. }
  92. currentItem = null;
  93. return;
  94. }
  95. });
  96. $('#' + target).bind("click",
  97. function() {
  98. if (defaulOption.alwaysShowALL) {
  99. _initItems(data);
  100. } else {
  101. _initItems(inputChange());
  102. }
  103. $('#' + suggestContainerId).removeAttr("style");
  104. var tempWidth = defaulOption.fontSize*maxFontNumber + 2 * defaulOption.itemPadding + 30;
  105. var containerWidth = Math.max(tempWidth, suggestContainerWidth);
  106. $('#' + suggestContainerId).css({
  107. 'border': '1px solid #ccc',
  108. 'max-height': '200px',
  109. 'top': suggestContainerTop,
  110. 'left': suggestContainerLeft,
  111. 'width': containerWidth,
  112. 'position': 'absolute',
  113. 'font-size': defaulOption.fontSize+'px',
  114. 'font-family':'Arial',
  115. 'z-index': 99999,
  116. 'background-color': '#FFFFFF',
  117. 'overflow-y': 'auto',
  118. 'overflow-x': 'hidden',
  119. 'white-space':'nowrap'
  120. });
  121. $('#' + suggestContainerId).show();
  122. });
  123. _initItems(data);
  124. $('#' + suggestContainerId).bind("blur",
  125. function() {
  126. $('#' + suggestContainerId).hide();
  127. });
  128. }
  129. })(jQuery);