jstree禁用复选框

时间:2011-12-13 10:05:06

标签: javascript checkbox jstree

我目前正在使用JS Tree插件和相关的复选框插件处理一些POC。 对于某些节点,我需要在默认情况下选中复选框并禁用任何进一步的选择。我找到了隐藏复选框的功能

.bind("load_node.jstree", function (e, data) {
          $(this).find('li[rel!=file]').find('.jstree-checkbox:first').hide();
      });

而不是完全隐藏复选框我想找到一种方法来禁用某些节点的复选框

3 个答案:

答案 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;
}