Slickgrid - 失去焦点以结束编辑

sun*_*wer 9 lost-focus slickgrid

编辑网格时,如果我在网格外单击,我编辑的框仍然可以编辑.当失去焦点时,如何让编辑过的单元格"完成"编辑?

cla*_*lav 15

以下代码将保存当前编辑.

Slick.GlobalEditorLock.commitCurrentEdit();
Run Code Online (Sandbox Code Playgroud)

您需要将它放在一个您认为应该触发保存的事件处理程序中.例如,如果你正在使用示例文本编辑器插件,我相信editor-text在编辑单元格时创建的输入字段中会添加一个CSS类,所以这样的东西应该可以工作:

$('#myGrid').on('blur', 'input.editor-text', function() {
    Slick.GlobalEditorLock.commitCurrentEdit();
});
Run Code Online (Sandbox Code Playgroud)

  • 这个答案非常有帮助.但它似乎引入了一个新问题:调用commitCurrentEdit似乎可以解决焦点问题.如果您尝试通过网格中的列进行制表,您会发现这会打破这一点.像这样:$(document).on("click",function(e){if(!$(e.target).hasClass("slick-cell")){Slick.GlobalEditorLock.commitCurrentEdit();}} ); 似乎工作得更好但仍有2个问题.1)无论你刚刚点击什么都没有保持专注.2)单击编辑器内部会破坏编辑器. (2认同)

Gra*_*yle 6

我发现我需要在超时中包装clav的处理程序:

$("#myGrid").on('blur', 'input.editor-text', function() {

    window.setTimeout(function() {

        if (Slick.GlobalEditorLock.isActive())
            Slick.GlobalEditorLock.commitCurrentEdit();

    });

});
Run Code Online (Sandbox Code Playgroud)

避免错误,如:

Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist. 
Run Code Online (Sandbox Code Playgroud)

使用键盘导航时.据推测,新的模糊处理程序会在SlickGrid执行自己的处理之前触发,这会导致问题.


mar*_*tin 5

不幸的是,可能由于事件处理方面的差异,Grame的版本中断了chrome的键盘导航。为了解决这个问题,如果新关注的元素不是网格中的另一个编辑器元素(作为键盘导航的结果),我添加了另一个检查以仅提交编辑:

            $('#grid').on('blur.editorFocusLost', 'input.editor-text', function() {
                window.setTimeout(function() {
                    var focusedEditor = $("#grid :focus");
                    if (focusedEditor.length == 0 && Slick.GlobalEditorLock.isActive()) {
                        Slick.GlobalEditorLock.commitCurrentEdit();
                    }
                });
            });
Run Code Online (Sandbox Code Playgroud)

这似乎适用于当前版本的Firefox,Chrome和ie。