Может ли jsTree использовать проверку радио - PullRequest
2 голосов
/ 04 мая 2010

Я знаю, что есть плагин для jsTree с именем jquery.tree.checkbox.js. которые делают узел дерева многозначным.

Мне просто интересно, есть ли плагин для raido проверки узла дерева? или как я могу изменить jquery.tree.checkbox.js для достижения этого?

Ответы [ 5 ]

4 голосов
/ 19 мая 2016

@ Ответ Асафа больше не работает в версии 3.3.1 в 2016 году. Теперь вам нужно установить multiple на core:

$jstree.jstree({
    core: {
        multiple: false,
        ...
    }
});
4 голосов
/ 04 июня 2010

Это можно просто сделать, добавив атрибут

    rules:{
            multiple : false
          } 

Внутри конфигурации дерева. Это сделает невозможным выбор нескольких записей.

3 голосов
/ 27 января 2017

Настройка multiple:false будет по-прежнему разрешать каскадирование, поэтому вам также необходимо отключить ее.

версия 3.3.3

$(".tree").jstree({
    plugins: ["checkbox"],
    core: {
        data: ...,
        multiple: false
    },
    checkbox: {
        three_state: false,
        cascade: "none"
    }
});
2 голосов
/ 19 апреля 2013

Параметр переключателя все еще не активирован, поэтому вы должны изменить параметр chceckbox как одиночный выбор.

bind('check_node.jstree', function(e, data) {
    var currentNode = data.rslt.obj.attr("id");
    $("#tree").jstree("get_checked",null,true).each 
        (function () { 
            if(currentNode != this.id){
                jQuery.jstree._reference($("#tree")).uncheck_node('#'+this.id);
            }
        }); 
});

см. http://jsfiddle.net/bwTrP/1/

1 голос
/ 30 сентября 2015

Используя jsTree версии 3.2.1 с плагином checkbox, можно эмулировать поведение радиокнопок, обрабатывающих событие «изменено», следующим образом:

//jstree configuration:
'checkbox': {
    three_state: false, //required for the cascade none to work
    cascade: 'none' //no auto all_children<->parent selection
},
//...

var resetting = false;
$('#tree').on('changed.jstree', function (e, data) {
    if (resetting) //ignoring the changed event
    {
        resetting = false;
        return;
    }
    if ($("#multiselect").is(':checked') == false && data.selected.length > 1) {
        resetting = true; //ignore next changed event
        data.instance.uncheck_all(); //will invoke the changed event once
        data.instance.check_node(data.node/*currently selected node*/);
    }
});

JSFiddle: Пример поведения радиокнопки JSTree с использованием подключаемого модуля-флажка

...