2017-01-31 8 views
0

У меня есть требование выполнить рекурсивное действие всякий раз, когда узел проверяется/не проверяется в JStree. Я попытался сделать следующее, но функция никогда не вызывается. Как я могу вызвать функцию из JStree при проверке/снятии отметки с узла?Невозможно вызвать функцию, когда узел проверен/не установлен в JStree

$('#jstree').on("uncheck_node.jstree", function (e, data) 
{ 
subfunction(selectednodetouncheck, data); 
}; 

function subfunction(para1, para2) 
{ 
//some operation; 
}; 

Подфункция никогда не вызывается .... Пожалуйста, дайте мне знать, как назвать эту функцию.

ответ

0

Вы должны использовать select_node и deselect_node, как показано ниже. Если вы хотите проверить и выбрать узел отдельно, вам нужно установить параметр плагина checkbox tie_selection в дереве config как false и вручную выбрать/отменить выбор узла.

Проверить демо - Fiddle Demo

$("#jstree") 
    .jstree({ 
     core: { 
      data: coredata, 
      check_callback: true 
     }, 
     plugins: ["checkbox"], 
     checkbox: { 
      tie_selection: false 
     } 
    }) 
    .on("select_node.jstree deselect_node.jstree", function(e, data) { 
     subfunction(data); 
    }) 
    .on("check_node.jstree uncheck_node.jstree", function(e, data) { 
     subfunction2(data); 
    }); 

function subfunction(data) { 
    //some operation; 
    alert('You got me selected: ' + data.node.state.selected) 
}; 

function subfunction2(data) { 
    //some operation; 
    alert('You got me checked: ' + data.node.state.checked); 

    // now you need to decide what you want to select or not 
    // and do it manually, e.g. like below 
    var selectFlag = true; 

    if (selectFlag) { 
     var action = data.node.state.checked ? 'select_node' : 'deselect_node'; 
     $("#jstree").jstree(action, data.node); 
    } 

}; 
+0

Но это идеальный способ? select_node отличается от check_node. что, если есть отдельная функция для select_node, то есть при выборе узла - он должен что-то выполнять, а check_node - выполнять что-то еще. –

+0

Если вы хотите иметь его отдельно, вам нужно будет вручную выбрать/отменить выбор узла после того, как он был установлен/снят флажок. И вам нужно будет указать, что вы хотите отменить выбор узла из проверки конфигурации плагинов checkbox - я обновил свой ответ и демонстрацию. –

+0

Спасибо. Я обнаружил, что я ошибся с параметрами, чтобы вызвать функцию. $ ('# jstree'). on ("uncheck_node.jstree", function (e, data) { подфункция (data.node.id); }; // вызывает функцию –

Смежные вопросы