Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jsTree:是否从编辑模式中退出?_Javascript_Jquery_Angular_Dom Events_Jstree - Fatal编程技术网

Javascript jsTree:是否从编辑模式中退出?

Javascript jsTree:是否从编辑模式中退出?,javascript,jquery,angular,dom-events,jstree,Javascript,Jquery,Angular,Dom Events,Jstree,我正在当前的Angular 2项目中使用jsTree插件。 一切都很好,但我现在尝试添加特定的行为: 当用户编辑一个节点并按下tab键时,我想在他正在编辑的节点的正下方自动添加一个新的空同级节点,并在其上启用编辑模式,以便他可以继续键入并有效地使用tab键作为键盘快捷键,在同一级别上快速创建大量节点 我已尝试将keyup事件侦听器添加到包含jsTree的高级div中: (keyup)="onKeyUp($event)" onKeyUp功能: onKeyUp(e: any) { if (

我正在当前的Angular 2项目中使用jsTree插件。 一切都很好,但我现在尝试添加特定的行为: 当用户编辑一个节点并按下tab键时,我想在他正在编辑的节点的正下方自动添加一个新的空同级节点,并在其上启用编辑模式,以便他可以继续键入并有效地使用tab键作为键盘快捷键,在同一级别上快速创建大量节点

我已尝试将keyup事件侦听器添加到包含jsTree的高级div中:

(keyup)="onKeyUp($event)"
onKeyUp功能:

onKeyUp(e: any) {
    if (e.code === 'Tab' && this.renamingNode) {
        // pressed tab while renaming subitem, insert new sibling item and start editing
    }
}
最后,jsTree编辑的(简化)代码:

let scope = this;
$(this.currentTree).jstree().create_node(selectedItem, { 'text': '', 'type': 'value' }, 'last', function callback(e: any) {
    scope.renamingNode = true;
    // enable renaming of node
    $(scope.currentTree).jstree().edit(e, null, function callback(addedNode: any, status: boolean, cancelled: boolean) {
        scope.renamingNode = false;
        // code to add addedNode to database using service
    }
}
这不符合预期。在调试时,我可以看到,当用户重命名节点时,每个键都被捕获,但是“tab”键似乎被jsTree以某种方式抑制了。不会触发onKeyUp函数,而是继续执行默认的jsTree行为,重命名节点并选择它。 我还研究了不同的jsTree.edit回调函数参数(nodeObject、status、cancelled),但这些参数在我的例子中似乎都没有用处


这并不是我的首要任务最后,这是一个更好的选择,但我真的很好奇如何实现这一点。。有人有什么想法吗?

开始编辑节点时,必须监视弹出的输入上的tab键,如下所示。还可以查看演示-


非常感谢您的详细回答和帮助,这很有意义!您知道如何将jstree添加到angular cli项目中吗?你有没有一个git,上面有你用jstree做什么的例子????请
$(document).on('keydown', '.jstree-rename-input', function(e){

   if (e.keyCode == '9') {
     var focusedNodeId = $('#jstree').jstree()._data.core.focused,
            focusedNode = $('#jstree').jstree().get_node( '#'+focusedNodeId );
        newNode = $("#jstree").jstree('create_node', '#'+focusedNodeId);

        // simulate timeout to ensure new node is in the DOM and is visible
        // before we start editing it 
        setTimeout(function(){
            $("#jstree").jstree('edit', newNode);
        }, 0);
   }

})