JSTree select_node事件触发两次

时间:2017-05-31 08:54:42

标签: jquery jstree

我创建了一个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'))
            })

更多信息 当我向下钻取时,我发现如果我们选择第一级(Root)节点,它只触发一个,如果它的第二级触发2 ..如果在第3级,则select_node事件触发3次。 所以我猜想有一些与level和select_node事件的连接。那么我们如何解决这个问题是因为与level和select事件的连接

1 个答案:

答案 0 :(得分:0)

选择根节点时,代码只会触发一次。选择子节点时,子节点仍然是根节点的一部分。因此代码将为子节点触发一次,对根节点触发一次。

如果您有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;
}