【问题标题】:JSTree select_node event firing twiceJSTree select_node 事件触发两次
【发布时间】:2017-05-31 08:54:42
【问题描述】:

我创建了一个 select_node 事件。但是当我们选择一个节点时它会触发两次。在这里,您可以看到我在 select_node 事件上设置的更改触发了两次。

在 JStree 初始化中,我还指定了一个检查事件。

    $('#div_vocabulary_tree').on('select_node.jstree', function (e, data) {
        alert("Select Event");
    });

这是我的 JStree 初始化代码

            $('#div_vocabulary_tree').jstree({
                plugins: ["wholerow", "checkbox", "types", "search"],
                "search": {

                    "case_insensitive": true

                },
                'checkbox': {
                    three_state: false, // to avoid that fact that checking a node also check others
                    whole_node: false, // to avoid checking the box just clicking the node 
                    tie_selection: false // for checking without selecting and selecting without checking
                },
                'core': {
                    themes: {
                        responsive: !1
                    },
                    check_callback: false,
                    'data': arrayCollectiom,
                    types: {
                        "default": {
                            icon: "fa fa-folder icon-state-warning icon-lg"
                        },
                        file: {
                            icon: "fa fa-file icon-state-warning icon-lg"
                        }
                    }
                }
            }).on("check_node.jstree uncheck_node.jstree", function (e, data) {
                //alert(data.node.parents);
                //alert(data.node.parent);
                //alert(data.node.id + ' ' + data.node.text +   (data.node.state.checked ? ' CHECKED' : ' NOT CHECKED'))
            })

更多信息 当我深入研究时,我发现如果我们选择第一级(根)节点,它只会触发一个,如果它的第二级它会触发 2.. 如果在第三级,select_node 事件会触发 3 次.. 所以我猜与 level 和 select_node 事件有一些联系。那么,由于关卡和选择事件的关系,我们如何解决这个问题

【问题讨论】:

  • 如果这是您拥有的完整代码,它只会为我触发一次 - fiddle.jshell.net/ermakovnikolay/d1buydyp
  • 你是否也尝试过不同级别的子节点?如果是这样,那对我来说很奇怪,为什么触发不止一个取决于级别...
  • 是的,你也可以在那个小提琴中尝试它们。您应该发布更多代码

标签: jquery jstree


【解决方案1】:

当您选择根节点时,代码只会触发一次。当您选择一个子节点时,该子节点仍然是根节点的一部分。所以代码会为子节点触发一次,为根节点触发一次。

如果您有 7 层深的子节点,则该事件将触发 7 次。

如何在事件处理程序中处理它的一个示例是检查事件触发的目标是否是当前被选择或单击的目标:

this._tree = this.$('.js-tree');

if(this._tree.get_node(evt.target) == this._tree.get_node(evt.currentTarget){
    //Do event logic
} else {
    //Do nothing
    return;
}

【讨论】:

    【解决方案2】:

    如果在同一个页面上多次加载树,请确保在中间销毁树以删除事件

    $(treeId).jstree('destroy');

    不要认为这是解决您问题的方法,但可能会帮助其他人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多