Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中动态创建按钮,不使用正确的onClick事件_Javascript_Jquery_Jstree - Fatal编程技术网

在javascript中动态创建按钮,不使用正确的onClick事件

在javascript中动态创建按钮,不使用正确的onClick事件,javascript,jquery,jstree,Javascript,Jquery,Jstree,我在javascript中动态创建按钮,每个按钮都应该在jsTree中选择相应的节点。问题是所有按钮都选择了各自分支中的最后一个节点。jsTree按预期工作,因此这不是问题所在。 有关守则: var children = node.children; for (var i = 0; i < children.length; i++) { var childNode = myTree.get_node(children[i]);

我在javascript中动态创建按钮,每个按钮都应该在jsTree中选择相应的节点。问题是所有按钮都选择了各自分支中的最后一个节点。jsTree按预期工作,因此这不是问题所在。 有关守则:

        var children = node.children;
        for (var i = 0; i < children.length; i++) {
            var childNode = myTree.get_node(children[i]);
            var myButton = document.createElement("div");

            myButton.className = 'imageButton';

                myButton.onclick = function () {
                    myTree.deselect_all([true]);
                    myTree.select_node(childNode);
                };
当我构建按钮时,子节点是正确的节点

问题是,当onClick启动时,childNode是childs[]中的最后一个元素。然后选择


有什么建议吗?

我认为问题在于。链接解释得很好。无论如何,我会试试这个,看看会发生什么:

function clickEvHandlerClosure(childnode) {
    return function () {
        myTree.deselect_all([true]);
        myTree.select_node(childnode);
    };
}

// your code
....

// In the loop, replace this:
//myButton.onclick = function () {
//                myTree.deselect_all([true]);
//                myTree.select_node(childNode);
//            };
// for this:
myButton.onclick = clickEvHandlerClosure(childnode);

可以工作。

我使用bind函数使其工作

     myButton.onclick = function (index) {
                var myTree = $('#jstree').jstree();
                var node = myTree.get_selected(true)[0];
                var children = node.children;
                var childNode = myTree.get_node(children[index]);
                    myTree.deselect_all([true]);
                    myTree.select_node(childNode);
                }.bind(this, i);

链接回答了我的问题。谢谢你根据链接发布了答案,如果有效,请接受