我目前正在使用JS Tree插件和相关的复选框插件处理一些POC。 对于某些节点,我需要在默认情况下选中复选框并禁用任何进一步的选择。我找到了隐藏复选框的功能
.bind("load_node.jstree", function (e, data) {
$(this).find('li[rel!=file]').find('.jstree-checkbox:first').hide();
});
而不是完全隐藏复选框我想找到一种方法来禁用某些节点的复选框
答案 0 :(得分:10)
您需要定义“禁用”类型(使用类型插件),然后将该类型分配给所需的节点。
以“禁用”类型定义为例:
"types" : {
"types": {
"disabled" : {
"check_node" : false,
"uncheck_node" : false
}
}
}
和类型分配:
$.jstree._reference('#tree').set_type("disabled", "#node5");
有关类型插件的更多信息,请here,您还可以查看this google group with more info on disabling checkboxes
希望它有所帮助!
答案 1 :(得分:1)
感谢mcabral和Tomasz的回答。它帮助我取得了正确的结果。但是,我需要添加一些额外的行以使其正常工作。这是我做的:
您需要向<li>
标记添加两个属性rel='disable'
,以指示jstree这将是复选框的新类型,而不是默认值和class='jstree-checked'
属性这将在加载树时预先检查复选框。
$rel = ( 'if the checkbox need to be pre-checked' )? 'rel="disabled" class="jstree-checked"' : '';
echo '<li id="checkbox_id" '. $rel .'>';
然后根据前面的答案,你需要定义rel属性中使用的'disable'类型,如下所示:
.jstree({
"types" :
{
"types" : {
"disabled" : {
"check_node" : false,
"uncheck_node" : false
}
}
},
"plugins" : ["themes","html_data","ui","crrm","types", "checkbox"],
"checkbox" : { "two_state" : true },
})
答案 2 :(得分:0)
如果您的商品是静态商品;例如...。总是像我的情况一样。
我只是简单地用CSS隐藏了该项目的复选框。在我进行服务器端检查时,无论如何,任何恶意的修改都会被丢弃。
#my_item_id .jstree-checkbox {
display: none;
}