找回密码
 立即注册

QQ登录

只需一步,快速开始

煎鱼你好

注册会员

2

主题

15

帖子

59

积分

注册会员

积分
59
最新发帖
煎鱼你好
注册会员   /  发表于:2018-9-6 08:55  /   查看:6119  /  回复:15
本帖最后由 煎鱼你好 于 2018-9-6 08:55 编辑

设置快捷键的方法已经找到,但是在具体实现中遇到了一些问题:var spreadtemp = GcSpread.Sheets.findControl(document.getElementById("ss"));
var activeSheet = spread.getActiveSheet();
//Map the created action to the Enter key.
activeSheet.addKeyMap(GcSpread.Sheets.Key.enter, false, false, false, false, ColorAction);
function ColorAction(){
    //Click on a cell and press the Enter key.
    activeSheet.getCell(activeSheet.getActiveRowIndex(), activeSheet.getActiveColumnIndex()) .backColor("red");}
代码的位置该放在什么文件中(或通过什么方法),才可以实现在页面加载完成后不需要点击自动触发上述代码(定义快捷键+快捷键具体功能)
PS:
$(document).ready()的话执行太早,spreadjs的相关文件还没加载完就会执行,会报错显示找不到getActiveSheet的方法;
window.onload的话要等到天荒地老。


15 个回复

正序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-17 10:22:37
16#
不客气,有什么问题欢迎另开新帖进行询问。
回复 使用道具 举报
煎鱼你好
注册会员   /  发表于:2018-9-15 11:06:40
15#
ClarkPan 发表于 2018-9-14 18:38
愧不敢当啊,您很给力才对

哇,突然暴富,谢谢啦
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-14 18:38:18
14#
愧不敢当啊,您很给力才对
回复 使用道具 举报
煎鱼你好
注册会员   /  发表于:2018-9-14 16:09:16
13#
ClarkPan 发表于 2018-9-13 12:01
不客气,有什么问题欢迎另开新帖进行询问、

我这边问题刚刚解决,原因是火狐浏览器的兼容问题,event.preventDefault();这句js代码无法顺利执行,通过重新封装event对象,可以在火狐浏览器顺利打开右键菜单(而不弹出浏览器自带右键菜单)。重新封装event的代码我也一并放在下边啦。最后感谢版主的耐心解答,很给力!
//firefox----这段js重新封装了event对象,经验证可以在火狐下支持

function __firefox(){
    HTMLElement.prototype.__defineGetter__("runtimeStyle", __element_style);
    window.constructor.prototype.__defineGetter__("event", __window_event);
    Event.prototype.__defineGetter__("srcElement", __event_srcElement);
}

function __element_style(){
    return this.style;
}

function __window_event(){
    return __window_event_constructor();
}

function __event_srcElement(){
    return this.target;
}

function __window_event_constructor(){
    if(document.all){
    return window.event;
}

var _caller = __window_event_constructor.caller;
    while(_caller!=null){
        var _argument = _caller.arguments[0];
        if(_argument){
            var _temp = _argument.constructor;
            if(_temp.toString().indexOf("Event")!=-1){
                return _argument;
            }
        }
    _caller = _caller.caller;
    }
    return null;
}

if(window.addEventListener){
    __firefox();
}

来源:https://zhidao.baidu.com/question/513471979.html

评分

参与人数 1金币 +1000 收起 理由
Clark.Pan + 1000 很给力!

查看全部评分

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-13 12:01:24
12#
不客气,有什么问题欢迎另开新帖进行询问、
回复 使用道具 举报
煎鱼你好
注册会员   /  发表于:2018-9-13 08:32:52
11#
ClarkPan 发表于 2018-9-12 14:17
您火狐浏览器版本是多少,我这边测试没问题,版本截图如下:

测试demo地址:

我这边也是最新版本那我再看看吧,如果有问题再向您请教,感谢您的耐心解答~
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-12 14:17:11
10#
您火狐浏览器版本是多少,我这边测试没问题,版本截图如下:
image.png635849914.png
测试demo地址:
https://demo.grapecity.com.cn/Sp ... os/initializeSpread
回复 使用道具 举报
煎鱼你好
注册会员   /  发表于:2018-9-12 09:37:19
9#
本帖最后由 煎鱼你好 于 2018-9-12 09:41 编辑
ClarkPan 发表于 2018-9-11 09:15
您也可以提供一个重现问题的demo,我这边一块帮您查,这样效率更高

谢谢啦,这个问题我先研究研究,如果研究不出来再向您请教。借这个帖子问一个相关问题,SpreadJS是否有浏览器兼容方面的问题呢?比如我使用右键菜单功能,在Chrome上一切正常,但是在火狐的浏览器上,本来被禁止的浏览器默认右键菜单没有被禁止,而是会和自定义的右键菜单一同弹出。

demo我也一并提供在下方,感谢您的耐心解答。


//右键点击触发
function processSpreadContextMenu(e)
{
    // move the context menu to the position of the mouse point
    var spreadtemp = GcSpread.Sheets.findControl(document.getElementById("statements_sheet"));
    var activeSheet = spreadtemp.getActiveSheet();
    var target = getHitTest(e.pageX, e.pageY, activeSheet),
        hitTestType = target.hitTestType,
        row = target.row,
        col = target.col,
        selections = activeSheet.getSelections();

    var isHideContextMenu = false;

    // if (hitTestType === GcSpread.Sheets.SheetArea.colHeader)
    // {
    //     if (getCellInSelections(selections, row, col) === null)
    //     {
    //         activeSheet.setSelection(-1, col, activeSheet.getRowCount(), 1);
    //     }
    //     if (row !== undefined && col !== undefined)
    //     {
    //         $(".context-header").show();
    //         $(".context-cell").hide();
    //     }
    // } else if (hitTestType === GcSpread.Sheets.SheetArea.rowHeader)
    // {
    //     if (getCellInSelections(selections, row, col) === null)
    //     {
    //         activeSheet.setSelection(row, -1, 1, activeSheet.getColumnCount());
    //     }
    //     if (row !== undefined && col !== undefined)
    //     {
    //         $(".context-header").show();
    //         $(".context-cell").hide();
    //     }
    // } else if (hitTestType === GcSpread.Sheets.SheetArea.viewport)
    // {
    //     if (getCellInSelections(selections, row, col) === null)
    //     {
    //         activeSheet.clearSelection();
    //         activeSheet.endEdit();
    //         activeSheet.setActiveCell(row, col);
    //         updateMergeButtonsState();
    //     }
    //     if (row !== undefined && col !== undefined)
    //     {
    //         $(".context-header").hide();
    //         $(".context-cell").hide();
    //         showMergeContextMenu();
    //     } else
    //     {
    //         isHideContextMenu = true;
    //     }
    // } else if (hitTestType === GcSpread.Sheets.SheetArea.corner)
    // {
    //     activeSheet.setSelection(-1, -1, activeSheet.getRowCount(), activeSheet.getColumnCount());
    //     if (row !== undefined && col !== undefined)
    //     {
    //         $(".context-header").hide();
    //         $(".context-cell").show();
    //     }
    // }

    var $contextMenu = $("#spreadContextMenu");
    $contextMenu.data("sheetArea", hitTestType);
    if (isHideContextMenu)
    {
        hideSpreadContextMenu();
    } else
    {
        $contextMenu.css({ left: e.pageX, top: e.pageY });
        $contextMenu.show();

        $(document).on("click.contextmenu", function ()
        {
            if ($(event.target).parents("#spreadContextMenu").length === 0)
            {
                hideSpreadContextMenu();
            }
        });
    }
}

//右键菜单点击触发
function processContextMenuClicked()
{
    var action = $(this).data("action");
    var spreadtemp = GcSpread.Sheets.findControl(document.getElementById("statements_sheet"));
    var activeSheet = spreadtemp.getActiveSheet();
    var sheetArea = $("#spreadContextMenu").data("sheetArea");

    hideSpreadContextMenu();

    switch (action)
    {
        // case "cut":
        //     GcSpread.Sheets.SpreadActions.cut.call(activeSheet);
        //     break;
        // case "copy":
        //     GcSpread.Sheets.SpreadActions.copy.call(activeSheet);
        //     break;
        // case "paste":
        //     GcSpread.Sheets.SpreadActions.paste.call(activeSheet);
        //     break;
        // case "cleardata":
        //     var selectedcells = activeSheet.getSelections();
        //     var rows = selectedcells[0].row;        //the start row of selected ranges;
        //     var rowCounts = selectedcells[0].rowCount;        //the number of selected rows;
        //     // var rows2 = rows + rowCounts - 1;
        //     var cols = selectedcells[0].col;        //the start column of selected ranges;
        //     var colCounts = selectedcells[0].colCount;        //the number of selected column;
        //     // var cols2 = cols + colCounts - 1;
        //     activeSheet.clear(rows,cols,rowCounts,colCounts,GcSpread.Sheets.SheetArea.viewport,GcSpread.Sheets.StorageType.Data);
        //     break;
        // case "clearstyle":
        //     var selectedcells = activeSheet.getSelections();
        //     var rows = selectedcells[0].row;        //the start row of selected ranges;
        //     var rowCounts = selectedcells[0].rowCount;        //the number of selected rows;
        //     var cols = selectedcells[0].col;        //the start column of selected ranges;
        //     var colCounts = selectedcells[0].colCount;        //the number of selected column;
        //     activeSheet.clear(rows,cols,rowCounts,colCounts,GcSpread.Sheets.SheetArea.viewport,GcSpread.Sheets.StorageType.Style);
        //     break;
        // case "insertrow":
        //     activeSheet.addRows(activeSheet.getActiveRowIndex(), 1);
        //     break;
        // case "insertcol":
        //     // activeSheet.addColumns(activeSheet.getActiveColumnIndex(), 1);
        //     // insertcol()
        //     break;
        // case "deleterow":
        //     activeSheet.deleteRows(activeSheet.getActiveRowIndex(), 1);
        //     break;
        // case "deletecol":
        //     activeSheet.deleteColumns(activeSheet.getActiveColumnIndex(), 1);
        //     break;
        // case "delete":
        //     if (sheetArea === GcSpread.Sheets.SheetArea.colHeader)
        //     {
        //         activeSheet.deleteColumns(activeSheet.getActiveColumnIndex(), 1);
        //     } else if (sheetArea === GcSpread.Sheets.SheetArea.rowHeader)
        //     {
        //         activeSheet.deleteRows(activeSheet.getActiveRowIndex(), 1);
        //     }
        //     break;
        // case "merge":
        //     var sel = activeSheet.getSelections();
        //     if (sel.length > 0)
        //     {
        //         sel = sel[sel.length - 1];
        //         activeSheet.addSpan(sel.row, sel.col, sel.rowCount, sel.colCount, GcSpread.Sheets.SheetArea.viewport);
        //     }
        //     updateMergeButtonsState();
        //     break;
        // case "unmerge":
        //     var sels = activeSheet.getSelections();
        //     for (var i = 0; i < sels.length; i++)
        //     {
        //         var sel = getActualCellRange(sels, activeSheet.getRowCount(), activeSheet.getColumnCount());
        //         for (var r = 0; r < sel.rowCount; r++)
        //         {
        //             for (var c = 0; c < sel.colCount; c++)
        //             {
        //                 var span = activeSheet.getSpan(r + sel.row, c + sel.col, GcSpread.Sheets.SheetArea.viewport);
        //                 if (span)
        //                 {
        //                     activeSheet.removeSpan(span.row, span.col, GcSpread.Sheets.SheetArea.viewport);
        //                 }
        //             }
        //         }
        //     }
        //     updateMergeButtonsState();
        //     break;
        // default:
        //     break;
    }
}

function hideSpreadContextMenu()
{
    $("#spreadContextMenu").hide();
    $(document).off("click.contextmenu");
}

function updateMergeButtonsState()
{
    var spreadtemp = GcSpread.Sheets.findControl(document.getElementById("statements_sheet"));
    var activeSheet = spreadtemp.getActiveSheet();
    var sels = activeSheet.getSelections(),
        mergable = false,
        unmergable = false;

    sels.forEach(function (range)
    {
        var ranges = activeSheet.getSpans(range),
            spanCount = ranges.length;

        if (!mergable)
        {
            if (spanCount > 1 || (spanCount === 0 && (range.rowCount > 1 || range.colCount > 1)))
            {
                mergable = true;
            } else if (spanCount === 1)
            {
                var range2 = ranges[0];
                if (range2.row !== range.row || range2.col !== range.col ||
                    range2.rowCount !== range2.rowCount || range2.colCount !== range.colCount)
                {
                    mergable = true;
                }
            }
        }
        if (!unmergable)
        {
            unmergable = spanCount > 0;
        }
    });

    $("#mergeCells").attr("disabled", mergable ? null : "disabled");
    $("#unmergeCells").attr("disabled", unmergable ? null : "disabled");
}

function getHitTest(pageX, pageY, sheet)
{
    var offset = $("#statements_sheet").offset(),
            x = pageX - offset.left,
            y = pageY - offset.top;
    var spreadtemp = GcSpread.Sheets.findControl(document.getElementById("statements_sheet"));
    var activeSheet = spreadtemp.getActiveSheet();
    return activeSheet.hitTest(x, y);
}

function getCellInSelections(selections, row, col)
{
    var count = selections.length, range;
    for (var i = 0; i < count; i++)
    {
        range = selections;
        if (range.contains(row, col))
        {
            return range;
        }
    }
    return null;
}

function getActualCellRange(cellRange, rowCount, columnCount)
{
    if (cellRange.row === -1 && cellRange.col === -1)
    {
        return new spreadNS.Range(0, 0, rowCount, columnCount);
    }
    else if (cellRange.row === -1)
    {
        return new spreadNS.Range(0, cellRange.col, rowCount, cellRange.colCount);
    }
    else if (cellRange.col === -1)
    {
        return new spreadNS.Range(cellRange.row, 0, cellRange.rowCount, columnCount);
    }

    return cellRange;
}

function showMergeContextMenu()
{
    // use the result of updateMergeButtonsState
    if ($("#mergeCells").attr("disabled"))
    {
        $(".context-merge").hide();
    } else
    {
        $(".context-cell.divider").show();
        $(".context-merge").show();
    }

    if ($("#unmergeCells").attr("disabled"))
    {
        $(".context-unmerge").hide();
    } else
    {
        $(".context-cell.divider").show();
        $(".context-unmerge").show();
    }
}

$(document).ready(function ()
{
    $("#statements_sheet").bind("contextmenu", processSpreadContextMenu);

    $("#spreadContextMenu a").click(processContextMenuClicked);// a 对应 a标签

    $(document).on("contextmenu", function ()
    {
        event.preventDefault();
        return false;
    });
});
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-9-11 09:15:49
8#
您也可以提供一个重现问题的demo,我这边一块帮您查,这样效率更高
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部