限制jstree中子节点的选择数量

问题描述 投票:0回答:4

我正在使用jsTree。我想将子节点选择限制为 4 个(要么不允许用户选择超过 4 个节点,要么禁用所有复选框)。我正在使用不起作用的选择限制。我怎样才能实现这个目标?

$("#mytree").jstree({ 
    "plugins" : [ "themes","html_data", "ui", "crrm","checkbox" ],
    "html_data" : {
        // ...
    },
    "checkbox": {
        "keep_selected_style": false
    },
    "ui": {
        "select_limit": 4,
    },
    // ...
});
javascript jquery checkbox limit jstree
4个回答
1
投票

我自己也遇到了这个问题。

如果您使用 jsTree v3+,“UI”插件不再存在,“select_limit”属性也不再存在。 这是当前可用插件的列表。

如果您只想一次选择一个选项,核心模块有一个“multiple”属性,您可以根据需要将其设置为 true/false。但如果你想将其限制为四个选择,那么作者建议使用“条件选择”插件


1
投票

我有同样的需求,并且我能够通过一些java脚本找到解决方案。 我想检查 3 个节点的限制,所以我这样做了:

$('#jstree')
    // listen for event
    .on('changed.jstree', function (e, data) {
            var i, j, r = [];
            var lenght = data.selected.length;


            for(i = 0, j = data.selected.length; i < j; i++) {
                 if(data.instance.get_node(data.selected[i]).type.localeCompare("child") != 0) {
                    lenght -= 1;
                }
            }


            if(lenght > 3) {

                if(data.instance.get_node(data.selected[data.selected.length-1]).type.localeCompare("child") == 0) {
                    $("#jstree").jstree("uncheck_node", data.instance.get_node(data.selected[data.selected.length-1]).id);
                } else {
                    $("#jstree").jstree("uncheck_node", data.instance.get_node(data.selected[data.selected.length-2]).id);
                }
            }
    })
    // create the instance
    .jstree({
          'core' : 
           ...

0
投票

按照常规方法,您可以按如下方式完成此任务

var children = document.getElementById("mytree").children;
var limit = 4;
for (var i = 0; i < limit; ++i) 
{
    if (!children[i]) return;
    children[i].classList.add("off");
}

0
投票

不是要死后发布旧线程,但我最近收到客户的请求,要求限制基于 jsTree 的元素的最大选择数量,并提出了以下解决方案:

$(document).ready(function () {
    var maxSelections = 3;
    $('#maxSelections').on("input", function() {
      maxSelections = $(this).val();
    });
    

    $('#tree').jstree({
      'core': {
        'data': [
          { "text": "Node 1" },
          { "text": "Node 2" },
          { "text": "Node 3" },
          { "text": "Node 4" },
          { "text": "Node 5" },
          { "text": "Node 6" },
          { "text": "Node 7" },
          { "text": "Node 8" },
          { "text": "Node 9" },
          { "text": "Node 10" }
          // Add more nodes as needed
        ]
      },
      'plugins' : [ 'checkbox' ],
      'checkbox' : {
          'keep_selected_style' : false,
          'three_state' : true,
          'cascade' : 'up'
      },
    }).on('changed.jstree', function (e, data) {
      // Check if the maximum limit has been reached
      if (data.selected.length > maxSelections) {
        // Deselect excess nodes
        var excessNodes = data.selected.slice(maxSelections);
        $('#tree').jstree('deselect_node', excessNodes);
        alert('Maximum number of selections reached!');
      }
    });
  });
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>jsTree Selection Limit</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.11/themes/default/style.min.css" />
</head>
<body>
Max Selections: <input type="number" value="3" min=1 max=10 id="maxSelections" />
<div id="tree"></div>

<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.11/jstree.min.js"></script>


</body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.