在我的页面中,我使用了jstree
和select2
。我想将两个插件集成在一起。有什么办法吗?我的代码看起来很简单,因为它只依赖于插件集成的领域,它看起来像:
var dataSelect = [
{
id: 1,
text: "test"
},
{
id: 2,
text: "test2"
},
{
id: 3, text: "test3"
}
];
var dataTree = [
{
id: 1, text: "test"
},
{
id: 3,
text: "test3"
}
];
$('#jstree').jstree({
'core': {
'data': dataTree,
"themes": {
"icons": false
}
},
"checkbox": {
"keep_selected_style": false,
"three_state": true
},
"plugins": ["checkbox", "state"]
});
$("#selectSample").select2({
data: dataSelect,
multiple: true
});
如您所见,两种情况下的数据都具有类似的ID。如果我点击树中的test
,那么我希望select
设置为"test"
。有没有解决这个问题的方法?
修改
@Nikolay Ermakov的回答让我纠正了思考,但问题是当我用ajax加载select
时。当我点击jstree中的某个选项时,数据将被销毁,我无法在select
中选择任何内容。此外,select2
上未选择任何选项。
EDIT2
当我点击jstree
中的某个选项时,系统会删除所有选项,并向select
输入一个空白值,可以选择该值。
答案 0 :(得分:2)
我想我已经双向进行了互动。请检查这个小提琴:JS Fiddle。
我使用了select {2}的jsTree和changed
事件的select/unselect
事件。
以下是代码的外观:
var dataSelect = [{id: "1", text: "test"},{id:"2", text: "test2"},{id:"3", text: "test3"}];
var dataTree = [{id: "1", text: "test"},{id:"3", text: "test3"}];
$("#selectSample").select2({data:dataSelect, multiple: true});
$('#jstree')
.on('changed.jstree', function (event, data) {
var $select = $("#selectSample").select2(),
selectedOptions = $select.val() || [],
optionId = data.node.id;
if( data.action == 'select_node'){
selectedOptions.push( optionId );
$select.val(selectedOptions).trigger("change");
}
if( data.action == 'deselect_node'){
selectedOptions.splice( selectedOptions.indexOf( optionId ), 1 );
$select.val(selectedOptions).trigger("change");
}
})
.jstree({
'core': {
'data': dataTree,
"themes":{
"icons":false
}
},
"checkbox": {
"keep_selected_style": false,
"three_state": true
},
"plugins" : [ "checkbox" ]
});
$("#selectSample")
.on('select2:select', function(event) {
$('#jstree').jstree('select_node', '#'+event.params.data.id, true);
})
.on('select2:unselect', function(event) {
$('#jstree').jstree('deselect_node', '#'+event.params.data.id, true);
});
答案 1 :(得分:0)
这样的工作 -
var dataSelect = [{id: 1, text: "test"},{id:2, text: "test2"},{id:3, text: "test3"}];
var dataTree = [{id:1, text: "test"},{id:3, text: "test3"}];
$('#jstree').jstree({
'core': {
'data': dataTree,
"themes":{
"icons":false
}
},
"checkbox": {
"keep_selected_style": false,
"three_state": true
},
"plugins" : [ "checkbox","state" ]
})
.on("select_node.jstree", function(a,b){
$("#selectSample").append('<option value="' + b.node.original.text + '">' + b.node.original.text + '</option>');
var selectedValues = $("#selectSample").val();
if (selectedValues == null) {
selectedValues = new Array();
}
selectedValues.push(b.node.original.text);
$("#selectSample").val(selectedValues).trigger('change');
});
$("#selectSample").select2({data:dataSelect, multiple: true});
答案 2 :(得分:0)