jsTree:在新创建的节点上绑定按键事件
jsTree: bind keypress event on a newly created node
我正在尝试通过 jsTree 的上下文菜单在新创建的节点上绑定按键事件。似乎为每个节点添加监听器并不是一个好主意。根据下面提供的评论的建议进行编辑
$(function () {
$('#demo').jstree({
...
"contextmenu":{
"items": function($node) {
var tree = $("#demo").jstree(true);
return {
"Create": {
"separator_before": false,
"separator_after": false,
"label": "Create",
"action": function (obj) {
var newNode = createNode($node,tree);
//tree.edit(newNode);
tree.edit(newNode, null, function (the_node, rename_status) {
console.log("status:"+rename_status);
});
}
}
}
};
}
}
})
});
function createNode($node,tree)
{
$newNode = tree.create_node($node); //create new node
return $newNode;
}
jstree create_node
函数不是 return 一个 DOM 节点,它 return 是一个 ID 字符串,如此处所述:http://www.jstree.com/api/#/?q=create_node&f=create_node%28[obj,%20node,%20pos,%20callback,%20is_loaded]%29
为了能够附加您需要 DOM 节点的任何事件,因此将您的 createNode
函数重写为:
function createNode($node,tree) {
$newNode = tree.create_node($node); //create new node
return tree.get_node($newNode, true);
}
还要记住,如果你像这样附加一个处理程序,如果这个节点的父节点关闭然后打开,它将会丢失,因为 jstree 仅在 DOM.如果这对您来说不合适 - 使用事件委托,例如将事件附加到树容器。
根据下面的评论,更好的解决方案是使用 edit
回调(前提是您使用的是 jstree v.3.1.1 或更高版本):
tree.edit(newNode, null, function (the_node, rename_status) {
// any custom logic you need
})
这是使用编辑回调和 v.3.1.1 的最终演示:
http://jsfiddle.net/DGAF4/498/
如果使用早期版本或者您不关心捕获对 rename_node
的调用 - 监听 rename_node.jstree
事件 - 这是响应名称更改的首选方法。
我正在尝试通过 jsTree 的上下文菜单在新创建的节点上绑定按键事件。似乎为每个节点添加监听器并不是一个好主意。根据下面提供的评论的建议进行编辑
$(function () {
$('#demo').jstree({
...
"contextmenu":{
"items": function($node) {
var tree = $("#demo").jstree(true);
return {
"Create": {
"separator_before": false,
"separator_after": false,
"label": "Create",
"action": function (obj) {
var newNode = createNode($node,tree);
//tree.edit(newNode);
tree.edit(newNode, null, function (the_node, rename_status) {
console.log("status:"+rename_status);
});
}
}
}
};
}
}
})
});
function createNode($node,tree)
{
$newNode = tree.create_node($node); //create new node
return $newNode;
}
jstree create_node
函数不是 return 一个 DOM 节点,它 return 是一个 ID 字符串,如此处所述:http://www.jstree.com/api/#/?q=create_node&f=create_node%28[obj,%20node,%20pos,%20callback,%20is_loaded]%29
为了能够附加您需要 DOM 节点的任何事件,因此将您的 createNode
函数重写为:
function createNode($node,tree) {
$newNode = tree.create_node($node); //create new node
return tree.get_node($newNode, true);
}
还要记住,如果你像这样附加一个处理程序,如果这个节点的父节点关闭然后打开,它将会丢失,因为 jstree 仅在 DOM.如果这对您来说不合适 - 使用事件委托,例如将事件附加到树容器。
根据下面的评论,更好的解决方案是使用 edit
回调(前提是您使用的是 jstree v.3.1.1 或更高版本):
tree.edit(newNode, null, function (the_node, rename_status) {
// any custom logic you need
})
这是使用编辑回调和 v.3.1.1 的最终演示: http://jsfiddle.net/DGAF4/498/
如果使用早期版本或者您不关心捕获对 rename_node
的调用 - 监听 rename_node.jstree
事件 - 这是响应名称更改的首选方法。