2015-09-15 20 views
5

Mam wtyczkę jstree Po prostu wypełniam tę wtyczkę wybranymi danymi węzła i posta za pomocą ajax w metodzie node-select. Althouh robię sterowania z „letChangeTrig” to nazywać siebie onChamge metodę rekurencyjnie powodu ja refrest drzewa .. ale chcę zadzwonić to kiedy użytkownik wybrać tylko ..Zatrzymaj jquery onChange iteracji rekurencyjnej

$('#tree_2').jstree({    
}).on('changed.jstree', function (e, datap) { 
    debugger 
    if(!letChangeTrig) 
    { 
     letChangeTrig = true; 
     return; 
    } 

    $.ajax({ 
     url: "../../Controller/ActiveDirectoryController.php5", 
     type: "POST", 
     dataType: "json", 
     data: params, 
     success: function (result) { 
      treeData_ = prepareObjectsforTree(result.Objects); 
      resfreshJSTree(treeData_);    
     }, 
     error: function (a, b, c) { 

     } 
    }); 
}); 

odświeżania:

function resfreshJSTree(treeDataa) { 
    letChangeTrig = false; 
    $('#tree_2').jstree(true).settings.core.data = treeDataa; 
    $('#tree_2').jstree(true).refresh(); 

} 

i to jest moja funkcja odświeżania jstree, która wyzwala metodę onChange .. i dane postu .. po odpowiedzi na sukces, wywołuję to ponownie, aby ponownie skompilować drzewo ze zmienionymi danymi, ale w ten sposób zaczyna się nazywać sobą bez wyboru użytkownika evet i go wpadną w pętlę. Potrzebuję zatrzymać to przez logiczną kontrolę

Odpowiedz

4

Czy wypróbowałeś metodę jQuery event.stopPropagation()? Zatrzymuje bulgotanie zdarzenia na elementach macierzystych, uniemożliwiając wykonanie jakichkolwiek programów obsługi zdarzeń nadrzędnych.

+1

Twoim obiektem zdarzenia jest e przekazane do funkcji wywołania zwrotnego. Wypróbuj e.stopPropagation() – user888734

+0

Ok Widzę teraz, dziękuję –