Javascript 在jsTree中,使节点文本可单击的最佳方法是什么(用于选中复选框)

Javascript 在jsTree中,使节点文本可单击的最佳方法是什么(用于选中复选框),javascript,jquery,jstree,Javascript,Jquery,Jstree,单击复选框旁边的节点文本时,我希望复选框切换其选中状态。通常,这是通过一个简单的步骤来完成的。但是,既然jsTree没有使用真正的复选框,那么该怎么做呢 当使用$'mytree.jstree{'plugins':['checkbox']}创建树时,如果我放置.delegatea,单击,函数事件,数据{$event.target.find'.jstree checkbox'。最后单击},它会工作。但有明显的延迟 因此,我提出了一个问题,单击相应文本时,勾选该框的最佳方式是什么?我同意您使用的单击处

单击复选框旁边的节点文本时,我希望复选框切换其选中状态。通常,这是通过一个简单的步骤来完成的。但是,既然jsTree没有使用真正的复选框,那么该怎么做呢

当使用$'mytree.jstree{'plugins':['checkbox']}创建树时,如果我放置.delegatea,单击,函数事件,数据{$event.target.find'.jstree checkbox'。最后单击},它会工作。但有明显的延迟


因此,我提出了一个问题,单击相应文本时,勾选该框的最佳方式是什么?

我同意您使用的单击处理程序技术。我没有看到提到的延迟,但这可能是因为我没有将任何内容发回服务器

如果复选框纯粹是可视的,那么可能可以直接修改该类。这应该比抛出另一个单击事件快

$(event.target).parent("li:first").toggleClass("jstree-unchecked").toggleClass("jstree-checked");

我同意你使用的点击处理技术。我没有看到提到的延迟,但这可能是因为我没有将任何内容发回服务器

如果复选框纯粹是可视的,那么可能可以直接修改该类。这应该比抛出另一个单击事件快

$(event.target).parent("li:first").toggleClass("jstree-unchecked").toggleClass("jstree-checked");

jstree的checkbox插件在选中/取消选中节点时似乎会执行其他操作。我相信以下几点可以满足您的需求:

$(function(){
    // Initialize jstree
    var $tree = $('.tree-target').jstree({
        "plugins": ["checkbox"]
    });

    // Bind an event to the anchor tag within each tree entry
    // Note: '.on' is used here as this will ensure that any
    // dynamically-generated entries will also use this 'click'
    // event.
    $tree.on('click', 'li.tree > a', function (e) {
        e.stopPropagation();

        // Find the first parent 'tree' element
        var $node = $(this).parents('li.tree').eq(0);

        // Toggle the state of the current 'tree' element
        // Note: The third parameter (in this case 'toggle')
        // can be any value other than true or false
        $tree.jstree('change_state', $node, 'toggle');
        return false;
    });
});​

另一方面,我认为您的方法导致显著延迟的原因可能与您将单击事件绑定到页面上的每个标记有关。这将导致在尝试查找适当的事件目标时产生大量开销。

在选中/取消选中节点时,jstree的复选框插件确实会执行其他操作。我相信以下几点可以满足您的需求:

$(function(){
    // Initialize jstree
    var $tree = $('.tree-target').jstree({
        "plugins": ["checkbox"]
    });

    // Bind an event to the anchor tag within each tree entry
    // Note: '.on' is used here as this will ensure that any
    // dynamically-generated entries will also use this 'click'
    // event.
    $tree.on('click', 'li.tree > a', function (e) {
        e.stopPropagation();

        // Find the first parent 'tree' element
        var $node = $(this).parents('li.tree').eq(0);

        // Toggle the state of the current 'tree' element
        // Note: The third parameter (in this case 'toggle')
        // can be any value other than true or false
        $tree.jstree('change_state', $node, 'toggle');
        return false;
    });
});​

另一方面,我认为您的方法导致显著延迟的原因可能与您将单击事件绑定到页面上的每个标记有关。这将导致在试图找到适当的事件目标时产生巨大的开销。

您已经提到,JsTree没有使用真正的复选框,但这只是默认行为。你知道你可以配置复选框插件来使用真正的复选框吗?看到了吗?是的,但是这个选项仍然不起作用。不管怎么说,使用真正的复选框,我的意思是它不允许您构建带有复选框和标签的ul/li树,这本来是允许标签单击的好方法。您提到过JsTree不使用真正的复选框,但这只是默认行为。你知道你可以配置复选框插件来使用真正的复选框吗?看到了吗?是的,但是这个选项仍然不起作用。无论如何,通过使用真正的复选框,我的意思是它不允许您使用复选框和标签构建ul/li树,这本来是允许标签单击的好方法。