jstree,我的需求是新建节点时可以让用户输入名称,如果后端校验发现名称不通过后,需要删除该节点,另一个需求是编辑节点,也是让用户输入,后端校验不通过要恢复,请给出例子
时间: 2023-09-19 17:10:04 浏览: 176
好的,针对你的需求,我提供以下代码实现:
1. 新建节点时让用户输入名称,如果后端校验不通过则删除该节点:
```javascript
$(function () {
$('#jstree').jstree({
'core': {
'data': {
'url': 'get_data.php',
'dataType': 'json'
},
'check_callback': true
},
'plugins': ['contextmenu', 'dnd'],
'contextmenu': {
'items': function (node) {
return {
'create': {
'separator_before': false,
'separator_after': true,
'label': '新建节点',
'action': function (obj) {
var ref = $('#jstree').jstree(true);
var sel = ref.get_selected();
if (!sel.length) {
return false;
}
sel = sel[0];
sel = ref.create_node(sel, {"type": "file"});
if (sel) {
ref.edit(sel);
}
}
}
};
}
},
'dnd': {
'check_while_dragging': true
}
})
.on('create_node.jstree', function (e, data) {
$.ajax({
type: 'POST',
url: 'create_node.php',
data: {
'parent': data.node.parent,
'name': data.node.text
},
success: function (data) {
if (data.success) {
data.node.id = data.id;
} else {
var ref = $('#jstree').jstree(true);
ref.delete_node(data.node);
alert('新建节点失败:' + data.message);
}
},
error: function () {
var ref = $('#jstree').jstree(true);
ref.delete_node(data.node);
alert('新建节点失败:服务器错误');
}
});
});
});
```
以上代码中,我们首先创建了一个 jstree,并启用了 contextmenu 和 dnd 两个插件。在 contextmenu 中,我们添加了一个 ‘新建节点’ 的菜单项,当用户点击该菜单项时,会在当前节点下新建一个节点,并进入编辑状态。
当用户完成编辑并点击保存时,会触发 `create_node.jstree` 事件,我们在该事件中向后端发送创建节点的请求,如果后端校验通过,则会将节点的id设置为后端返回的id,并继续显示该节点;如果后端校验不通过,则会删除该节点,并弹出错误提示。
2. 编辑节点时让用户输入名称,如果后端校验不通过则恢复该节点:
```javascript
$(function () {
$('#jstree').jstree({
'core': {
'data': {
'url': 'get_data.php',
'dataType': 'json'
},
'check_callback': true
},
'plugins': ['contextmenu', 'dnd'],
'contextmenu': {
'items': function (node) {
return {
'rename': {
'separator_before': false,
'separator_after': false,
'label': '编辑节点',
'action': function (obj) {
var ref = $('#jstree').jstree(true);
ref.edit(node);
}
}
};
}
},
'dnd': {
'check_while_dragging': true
}
})
.on('rename_node.jstree', function (e, data) {
$.ajax({
type: 'POST',
url: 'rename_node.php',
data: {
'id': data.node.id,
'name': data.text
},
success: function (data) {
if (!data.success) {
var ref = $('#jstree').jstree(true);
ref.refresh();
alert('编辑节点失败:' + data.message);
}
},
error: function () {
var ref = $('#jstree').jstree(true);
ref.refresh();
alert('编辑节点失败:服务器错误');
}
});
});
});
```
以上代码中,我们在 contextmenu 中添加了一个 ‘编辑节点’ 的菜单项,当用户点击该菜单项时,会进入编辑状态。当用户完成编辑并点击保存时,会触发 `rename_node.jstree` 事件,我们在该事件中向后端发送重命名节点的请求,如果后端校验通过,则继续显示该节点;如果后端校验不通过,则会刷新 jstree,恢复节点的原始名称,并弹出错误提示。
阅读全文