jquery-xmenu.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*
  2. * X-Menu 下拉框多选组件
  3. * 依赖jquery.powerFloat.js
  4. * 整合powerFloat
  5. * 浏览器支持 FF Chrome Opera IE9 IE8一下不兼容
  6. * @author yelingfeng
  7. * @email yelingfeng521@gmail.com
  8. */
  9. (function($) {
  10. var defaults = {
  11. width :580, //可选参数:inherit,数值(px)
  12. eventType: "click", //事件类型,其他可选参数有:click, focus
  13. dropmenu:".xmenu",//弹出层div
  14. hiddenID : "selectposhidden",//隐藏域ID
  15. emptytext: "请选择"
  16. };
  17. $.fn.xMenu = function(options) {
  18. return $(this).each(function() {
  19. var owl = $.extend({}, defaults, options || {});
  20. //触发按钮
  21. var $this = $(this);
  22. //span
  23. var $span = $this.find("span");
  24. //浮动层主div
  25. var $dropmenu= $(owl.dropmenu);
  26. //触发隐藏域 存职位ID
  27. var $Hd = $("#"+owl.hiddenID);
  28. //主li
  29. var $mli = $("dl li",$dropmenu);
  30. //关闭按钮
  31. var $closebtn =$(".m-close", $dropmenu);
  32. //已选在职位div
  33. var $selectinfo = $(".select-info",$dropmenu);
  34. //已选在职位ul
  35. var $selectUl = $("ul",$selectinfo);
  36. //确认按钮
  37. var $okbtn = $("a[name='menu-confirm']",$selectinfo);
  38. //伸缩事件绑定
  39. $("dl dt",$dropmenu).toggle(function(){
  40. var $this = $(this);
  41. if($this.hasClass('open')){
  42. $this.removeClass('open').next().slideUp('fast');
  43. }else{
  44. $this.addClass('open').next().slideDown('fast');
  45. }
  46. } , function(){
  47. $(this).removeClass('open').next().slideUp('fast');
  48. });
  49. //绑定关闭
  50. $closebtn.click(function(){
  51. $.powerFloat.hide();
  52. });
  53. //绑定保存
  54. $okbtn.click(function(){
  55. var $li =$selectUl.find("li");
  56. var name = "";
  57. var id = "";
  58. $li.each(function(){
  59. _this = $(this);
  60. name += _this.text()+",";
  61. id += _this.attr("rel")+",";
  62. })
  63. name = name.substring(0,name.length-1);
  64. id = id.substring(0,id.length-1);
  65. if(name.length>10){
  66. $span.attr({"title":name});
  67. name =name.substring(0,10)+"...";
  68. }
  69. $span.text(name);
  70. $Hd.val(id);
  71. $.powerFloat.hide();
  72. });
  73. //绑定每一个职位
  74. $mli.click(function(){
  75. var $li = $(this);
  76. var val =$li.text();
  77. var id = $li.attr("rel");
  78. if($selectinfo.is(":hidden")){
  79. $selectinfo.show();
  80. }
  81. if($li.hasClass("current")){
  82. $selectUl.find("li[rel='"+id+"']").remove();
  83. $li.removeClass("current");
  84. }else{
  85. $("<li rel='"+id+"' class='current'>"+val+"</li>").appendTo($selectUl);
  86. $li.addClass("current");
  87. }
  88. if($selectUl.children("li").length==0){
  89. $selectinfo.hide();
  90. }
  91. });
  92. //绑定已选区li事件
  93. $("li",$selectUl).live('click',function(){
  94. var $li = $(this);
  95. var id = $li.attr("rel");
  96. $mli.filter("li[rel='"+id+"']").removeClass("current");
  97. $li.remove();
  98. if($selectUl.children("li").length==0){
  99. $selectinfo.hide();
  100. }
  101. });
  102. //绑定power浮动层
  103. $this.powerFloat({
  104. width: owl.width,
  105. eventType: owl.eventType,
  106. offsets: {
  107. x: 0,
  108. y: -1
  109. },
  110. target: $dropmenu,
  111. showCall: function(){
  112. setCurrentItem($Hd.val());
  113. $this.addClass("menu-open");
  114. },
  115. hideCall:function(){
  116. $this.removeClass("menu-open");
  117. if($selectUl.children("li").length==0){
  118. $span.text(owl.emptytext);
  119. $Hd.val("");
  120. }
  121. }
  122. });
  123. //选中已选的职位
  124. var setCurrentItem = function (val){
  125. if(val&&val!=""){
  126. $mli.removeClass("current");
  127. var array = val.split(",");
  128. $selectUl.empty();
  129. for(var i=0;i<array.length;i++){
  130. var $cli = $mli.filter("li[rel='"+array[i]+"']");
  131. $cli.addClass("current");
  132. $("<li rel='"+array[i]+"' class='current'>"+$cli.text()+"</li>").appendTo($selectUl);
  133. }
  134. }else{
  135. $selectinfo.hide();
  136. }
  137. }
  138. });
  139. };
  140. })(jQuery);