世间自有公道,付出总有回报,说到不如做到,要做就做好,步步高!

丰富Easyui 的插件 - lookup

插件用途:

  主要用于表单中,某字段的内容是用其他表里的记录ID。当然你可以使用combobox、combotree、combogrid等,但有时这些表现方式并不是很好,希望弹出个层,然后在去做一些查询并选取的操作。所以就封装了一下,方便以后使用,不用在写重复的代码。

效果图:

  

 

使用方法:

  插件使用Easyui 的相关样式,所以使用时需要引入Easyui 的相关脚本及样式。

  

var lu = $('#txt_ParentId').lookup({
        title: '选择上级区域',
        dialog: {
            content: '<ul id=ptree></ul>',
            height: 400,width:300,
            onOpen:function() {
                $('#ptree').tree({
                    url: actionUrl,
                    data: $('#areatree').tree('getData'),
                    onClick: function(node) {
                        lu.lookup('setValue', node.id).lookup('setText', node.text);

                        lu.lookup('close'); // 关闭弹窗
                    }
                });
            }
        }
    }).lookup('setText', '请选择区域').lookup('setValue', -1);        

  

 dialog:{} 这里就是Easyui 中的dialog ,参数神马的都一样

 

插件源码:

css

 .lookup .combo-arrow{
    background:url(../images/icon-select.gif) no-repeat 50% 50%;
}

图片:

js

/*
疯狂秀才(1055818239) 
version: 0.01
*/
(function ($) {

    // 创建控件DOM
    function create(target) {
        var id = $(target).attr('id');

        if (!id) {
            id = 'lookup_' + new Date().getTime();
            $(target).attr('id', id);
        }

        $(target).addClass('combo-f').hide();

        var lookup = $('<span class="combo"></span>').insertAfter(target);
        var textbox = $('<input type="text" class="combo-text" />').appendTo(lookup);
        var arrow = $("<span><span class=\"combo-arrow \"></span></span>").appendTo(lookup);
        var valbox = $("<input type=\"hidden\" class=\"combo-value\">").appendTo(lookup);

        lookup.addClass('lookup');



        var state = $.data(target, 'lookup');

        // 添加图标
        if (state.options.iconCls) {
            arrow.find('.combo-arrow').addClass(state.options.iconCls);
        }
        else {
            arrow.find('.combo-arrow').addClass('icon-search');
        }

        // 创建 dialog
        var _dialogOpts = {
            closed: true,
            title: state.options.title,
            onClose:function() {
                state.dialog.dialog('destroy');
                state.dialog = null;
            }
        }
        
        var name = $(target).attr("name");
        if (name) {
            lookup.find("input.combo-value").attr("name", name);
            $(target).removeAttr("name").attr("comboName", name);
        }
        textbox.attr("autocomplete", "off");

        arrow.on('click', function () {
            
            if (!state.dialog) {
                var did = 'dialog_' + id + '-' + new Date().getTime();
                _dialogOpts = $.extend({}, state.options.dialog, _dialogOpts);

                var _dialog = $('<div/>').attr('id', did).dialog(_dialogOpts);
                state.dialog = _dialog;
            }

            state.dialog.dialog('open');
        });

        state.textbox = textbox;
        state.valbox = valbox;
        

    }

    $.fn.lookup = function (options, param) {
        if (typeof options == 'string') {
            var method = $.fn.lookup.methods[options];
            if (method) {
                return method(this, param);
            } else {
                return this.lookup(options, param);
            }
        }

        options = options || {};

        return this.each(function () {
            var state = $.data(this, 'lookup');
            if (state) {
                $.extend(state.options, options);
                create(this);
            }
            else {
                $.data(this, 'lookup', { options: $.extend({}, $.fn.lookup.defaults, options) });
                create(this);
            }
        })

    }


    $.fn.lookup.methods = {
        open: function () { },
        close: function (jq) {
            return jq.each(function() {
                var state = $.data(this, 'lookup');
                state.dialog.dialog('close');
            });
        },
        setValue: function (jq, val) {
            return jq.each(function () {
                var state = $.data(this, 'lookup');
                state.valbox.val(val);
            });
            
        },
        getValue: function (jq) {
            var state = $.data(jq[0], 'lookup');
            return state.valbox.val();

        },
        setText: function (jq, text) {
            return jq.each(function () {
                var state = $.data(this, 'lookup');
                state.textbox.val(text);
            });

        },
        getText: function (jq) {
            var state = $.data(jq[0], 'lookup');
            return state.textbox.val();
        }
    }

    $.fn.lookup.defaults = {
        iconCls: '',
        width: 120, height: 'auto',
        dialog: {
            title: '选择',
            width: 400, height: 300
        },
        onOpened: function() {
        }
    }

})(jQuery);

  

 

 

 

posted @ 2013-08-28 14:11  疯狂秀才  阅读(10007)  评论(5编辑  收藏  举报