Skip to content
jquery.jgsteditcell.js 3.59 KiB
Newer Older
Jack Dan's avatar
Jack Dan committed

(function ($) {
    $.fn.jgstEditCell = function (options) {
        var editAbleCellIndexList;
        var $editTextbox;

        var defaults = {
            editorClass: "theEditor"
        };
        var dStart = new Date().getTime();
        var opts = $.extend(defaults, options);

        this.each(function () {
            editAbleCellIndexList = new Array();
            $(this).find("tr:first th").each(function () {
                if ($(this).attr("editAble") == "true") {
                    editAbleCellIndexList.push($(this).index());
                }
            });

            /*
            for (i = 0; i < editAbleCellIndexList.length; i++) {
            $(this).find("tr:not(:first) td:nth-child(" + (editAbleCellIndexList[i]+1) + ")").bind("click", CellClicked);
            }
            */

            $(this).find("tr:not(:first)").each(function () {
                var $theRowCells = $(this).children();
                for (i = 0; i < editAbleCellIndexList.length; i++) {
                    $($theRowCells.get(editAbleCellIndexList[i])).bind("click", CellClicked)
                    .bind("keydown", function (event) {
                        if (event.keyCode == 13) {
                            var newVal = event.srcElement.value;
                            var $oCell = $(event.srcElement).parent();
                            var cellIndex = $oCell.index();
                            var $nextCell = $oCell.parent().next();
                            if ($nextCell.length == 0) {
                                $oCell.text($editTextbox.val());
                                $editTextbox.hide();
                            }
                            else {
                                $nextCell.children().get(cellIndex).click();
                            }
                            return false;
                        } else if (event.keyCode == 37) {
                            /*
                            var newVal = event.srcElement.value;
                            var txtRange = event.srcElement.createTextRange();
                            var dotIndex = newVal.indexOf(".");
                            alert(txtRange);
                            */
                        }
                    });
                }
            });

            $editTextbox = $("<input type=\"text\" class=\"editTextbox\" />");

            //$("#msg").text(new Date().getTime() - dStart);
        });

        function CellClicked(event) {
            if (event.srcElement.tagName == "TD" && $(event.srcElement).find("input").length == 0) {
                //原始单元格编辑框内容
                var oText = "";
                //原始单元格对象
                var $oTd = null;
                if ($editTextbox.parent().length > 0 && $editTextbox.parent().get(0).tagName == "TD") {
                    //取上一单元格信息
                    oText = $editTextbox.val();
                    $oTd = $editTextbox.parent();
                }

                //当前单元格
                $cell = $(event.srcElement);
                //将当前单元格的值赋给编辑框
                $editTextbox.val($cell.text());
                //把编辑框插入当前单元格
                $cell.empty().append($editTextbox);
                //选中编辑框中文本
                $editTextbox.show().focus().select();

                //还原上一单元格内容
                if ($oTd != null) {
                    //内容不需要更新,直接还原内容
                    $oTd.text(oText);
                }
            }
        }

    };
})(jQuery);