123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /**
- * @author Roger Wu
- */
- (function($){
- var allSelectBox = [];
- var killAllBox = function(bid){
- $.each(allSelectBox, function(i){
- if (allSelectBox[i] != bid) {
- if (!$("#" + allSelectBox[i])[0]) {
- $("#op_" + allSelectBox[i]).remove();
- //allSelectBox.splice(i,1);
- } else {
- $("#op_" + allSelectBox[i]).css({ height: "", width: "" }).hide();
- }
- $(document).unbind("click", killAllBox);
- }
- });
- };
-
- var _onchange = function (event){
- var $ref = $("#"+event.data.ref);
- if ($ref.size() == 0) return false;
- $.ajax({
- type:'POST', dataType:"json", url:event.data.refUrl.replace("{value}", encodeURIComponent(event.data.$this.val())), cache: false,
- data:{},
- success: function(json){
- if (!json) return;
- var html = '';
- $.each(json, function(i){
- if (json[i] && json[i].length > 1){
- html += '<option value="'+json[i][0]+'">' + json[i][1] + '</option>';
- }
- });
-
- var $refCombox = $ref.parents("div.combox:first");
- $ref.html(html).insertAfter($refCombox);
- $refCombox.remove();
- $ref.trigger("change").combox();
- },
- error: DWZ.ajaxError
- });
- };
-
- $.extend($.fn, {
- comboxSelect: function(options){
- var op = $.extend({ selector: ">a" }, options);
-
- return this.each(function(){
- var box = $(this);
- var selector = $(op.selector, box);
- allSelectBox.push(box.attr("id"));
- $(op.selector, box).click(function(){
- var options = $("#op_"+box.attr("id"));
- if (options.is(":hidden")) {
- if(options.height() > 300) {
- options.css({height:"300px",overflow:"scroll"});
- }
- var top = box.offset().top+box[0].offsetHeight-50;
- if(top + options.height() > $(window).height() - 20) {
- top = $(window).height() - 20 - options.height();
- }
- options.css({top:top,left:box.offset().left}).show();
- killAllBox(box.attr("id"));
- $(document).click(killAllBox);
- } else {
- $(document).unbind("click", killAllBox);
- killAllBox();
- }
- return false;
- });
- $("#op_"+box.attr("id")).find(">li").comboxOption(selector, box);
- });
- },
- comboxOption: function(selector, box){
- return this.each(function(){
- $(">a", this).click(function(){
- var $this = $(this);
- $this.parent().parent().find(".selected").removeClass("selected");
- $this.addClass("selected");
- selector.text($this.text());
-
- var $input = $("select", box);
- if ($input.val() != $this.attr("value")) {
- $("select", box).val($this.attr("value")).trigger("change");
- }
- });
- });
- },
- combox:function(){
- /* 清理下拉层 */
- var _selectBox = [];
- $.each(allSelectBox, function(i){
- if ($("#" + allSelectBox[i])[0]) {
- _selectBox.push(allSelectBox[i]);
- } else {
- $("#op_" + allSelectBox[i]).remove();
- }
- });
- allSelectBox = _selectBox;
-
- return this.each(function(i){
- var $this = $(this).removeClass("combox");
- var name = $this.attr("name");
- var value= $this.val();
- var label = $('option[value="' + value + '"]',$this).text();
- var ref = $this.attr("ref");
- var refUrl = $this.attr('refUrl') || '';
- var cid = $this.attr("id") || Math.round(Math.random()*10000000);
- var select = '<div class="combox"><div id="combox_'+ cid +'" class="select"' + (ref?' ref="' + ref + '"' : '') + '>';
- select += '<a href="javascript:" class="'+$this.attr("class")+'" name="' + name +'" value="' + value + '">' + label +'</a></div></div>';
- var options = '<ul class="comboxop" id="op_combox_'+ cid +'">';
- $("option", $this).each(function(){
- var option = $(this);
- options +="<li><a class=\""+ (value==option[0].value?"selected":"") +"\" href=\"#\" value=\"" + option[0].value + "\">" + option[0].text + "</a></li>";
- });
- options +="</ul>";
-
- $("body").append(options);
- $this.after(select);
- $("div.select", $this.next()).comboxSelect().append($this);
-
- if (ref && refUrl) {
- $this.unbind("change", _onchange).bind("change", {ref:ref, refUrl:refUrl, $this:$this}, _onchange);
- }
-
- });
- }
- });
- })(jQuery);
|