2015-09-15 8 views
5

Ho il plugin jstree Semplicemente riempio questo plugin per nodo selezionato e posta i dati con ajax nel metodo di selezione del nodo. Althouh Faccio un controllo con "letChangeTrig" si chiama se stesso onChamge metodo ricorsivo a causa di I refrest albero .. ma io voglio chiamare questo quando l'utente seleziona solo ..stop jquery onChange iterazione ricorsiva

$('#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) { 

     } 
    }); 
}); 

aggiornamento:

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

} 

e questa è la mia funzione di aggiornamento jstree che attiva il metodo onChange .. e pubblica i dati .. dopo la risposta al successo, lo chiamo di nuovo per ricostruire l'albero con i dati modificati, ma in questo modo inizia a chiamarsi senza che gli utenti selezionino e cadere in loop .. Ho bisogno di fermarlo con il controllo logico

risposta

4

Hai provato il metodo jQuery event.stopPropagation()? Arresta il bubbling di un evento agli elementi padre, impedendo l'esecuzione di eventuali gestori di eventi genitore.

+1

L'oggetto evento è la e passata alla funzione di richiamata. Prova e.stopPropagation() – user888734

+0

Ok, ora vedo, grazie –