纯js实现的软键盘

(function (jquery) {
    //defined variable
    var currentobj,
    _getdata = function (opts, callback) {
        jquery.ajax({
            type: "post",
            dataType: "text",
            url: opts.requestdataurl,
            cache: false,
            data: { sfbcode: jquery("." + opts.names._codetxt).val() },
            success: callback
        });


    },
    //when code textbox value changed, trigger this event
    _codechangeevent = function (opts) {
        //if codetext onchange trigger 
        opts.onkeydown(jquery("." + opts.names._codetxt).val());
        //------------------import---------------------------
        if (opts.onlykeyboard)
            currentobj.val(jquery("." + opts.names._codetxt).val());
        else {
            jquery("." + opts.names._resultsselect).empty();
            //get data from server
            _getdata(opts, function (data) {
                var data = eval("(" + data + ")");
                jquery(data).each(function (index, element) {
                    if (element.name != undefined)
                        jquery("." + opts.names._resultsselect).append("");
                });
            });
        }


    },
    //letter button event
    _letterevent = function (opts) {
        jquery("." + opts.names._letterbtn).bind("click",
            function () {
                if (opts.maxlength == null) {
                    jquery("." + opts.names._codetxt).val(jquery("." + opts.names._codetxt).val() + jquery(this).val());
                    _codechangeevent(opts);
                }
                else if (opts.maxlength != null && jquery("." + opts.names._codetxt).val().length < opts.maxlength) {
                    jquery("." + opts.names._codetxt).val(jquery("." + opts.names._codetxt).val() + jquery(this).val());
                    _codechangeevent(opts);
                }
            });
        //clear button binding event.
        jquery("." + opts.names._clearbtn).bind("click", function () {
            jquery("." + opts.names._codetxt).val("");
            if (currentobj != null) currentobj.val("");
        });
    },
    //delete button click trigger
    _deleteevent = function (opts) {
        jquery("." + opts.names._delbtn).bind("mousedown", function () {
            var val = jquery("." + opts.names._codetxt).val();
            if (val.length != 0) {
                val = val.substring(0, val.length - 1);
                jquery("." + opts.names._codetxt).val(val);
                _codechangeevent(opts);
            }
        });
    },
    //query button click
    _queryevent = function (opts) {
        // _getdata(opts, filldata);
    },
    //when click select item
    _selectclickevent = function (opts) {
        jquery("." + opts.names._resultsselect).bind("click",
        function () {
            if (currentobj != null) currentobj.val(jquery("." + opts.names._resultsselect).val());
        });
    },
    //add class attribute to element
    _addclstoele = function (cls, ele) {
        if (cls != undefined)
            ele.addClass(cls);
    },
    //create input control element
    _createinputelement = function (type, cls, val) {
        var element = jquery("");
        _addclstoele(cls, element);
        if (val != undefined)
            element.val(val);
        return element;
    },
    //create div element
    _createdivelement = function (cls) {
        var element = jquery("
");
        _addclstoele(cls, element);
        return element;
    },
    //create keyboard button
    _createkeyboard = function (container, opts) {
        var i = 0;
        //create 0-9 number
        for (i = 0; i < 10; i++) {
            container.append(_createinputelement("button", opts.names._letterbtn, i));
        }
        //create a-z word
        for (i = 97; i < 123; i++) {
            container.append(_createinputelement("button", opts.names._letterbtn, String.fromCharCode(i)));
        }
        //create A-Z word
        if (!opts.simplekeyboard) {
            for (i = 65; i < 92; i++) {
                container.append(_createinputelement("button", opts.names._letterbtn, String.fromCharCode(i)));
            }
        }
    },
    //button bind  event
    _attachevent = function (opts) {
        _letterevent(opts);


    },
    //restore keyboard 
    _restorekeyboard = function (opts) {
        jquery("." + opts.names._codetxt).val("");
        jquery("." + opts.names._resultsselect).empty();
    },
    //toggle visible
    _visiblekeyboard = function (v, opts) {
        if (v) {


            jquery("." + opts.names._maindiv).css("left", currentobj.offset().left);
            jquery("." + opts.names._maindiv).css("top", currentobj.offset().top + 20);
            jquery("." + opts.names._maindiv).show();
            _restorekeyboard(opts);
        }
        else {
            jquery("." + opts.names._maindiv).hide();
            _restorekeyboard(opts);
        }
    },
    //Init face
    _showkeyboard = function (opts) {
        //get main content
        // var content = jquery("."+opts.names._maindiv).hide();
        var content = _createdivelement(opts.names._maindiv).css("position", "absolute").css("z-index", "9999").hide();
        //create keyboard left panel
        var skbleft = _createdivelement(opts.names._leftdiv)
            .append(_createinputelement("text", opts.names._codetxt))
        skbleft.append(jquery("