2017-05-31 3 views
2

Il existe un événement select_node que j'ai créé. Mais son tir deux fois lorsque nous sélectionnons un nœud. Ici comme vous pouvez voir l'alter que je définis sur l'événement select_node qui tire deux fois.JSTree select_node déclenchement de l'événement deux fois

Toujours dans l'initialisation JStree, j'ai spécifié un événement check.

$('#div_vocabulary_tree').on('select_node.jstree', function (e, data) { 
     alert("Select Event"); 
    }); 

Ceci est mon code d'initialisation JStree

  $('#div_vocabulary_tree').jstree({ 
       plugins: ["wholerow", "checkbox", "types", "search"], 
       "search": { 

        "case_insensitive": true 

       }, 
       'checkbox': { 
        three_state: false, // to avoid that fact that checking a node also check others 
        whole_node: false, // to avoid checking the box just clicking the node 
        tie_selection: false // for checking without selecting and selecting without checking 
       }, 
       'core': { 
        themes: { 
         responsive: !1 
        }, 
        check_callback: false, 
        'data': arrayCollectiom, 
        types: { 
         "default": { 
          icon: "fa fa-folder icon-state-warning icon-lg" 
         }, 
         file: { 
          icon: "fa fa-file icon-state-warning icon-lg" 
         } 
        } 
       } 
      }).on("check_node.jstree uncheck_node.jstree", function (e, data) { 
       //alert(data.node.parents); 
       //alert(data.node.parent); 
       //alert(data.node.id + ' ' + data.node.text + (data.node.state.checked ? ' CHECKED' : ' NOT CHECKED')) 
      }) 

Plus d'info Quand je déclinés, ce que je trouve est si nous choisissons le premier niveau (racine) nœud, il se déclenche une seule, si son 2ème niveau se déclenche 2 .. même si dans le 3ème niveau, l'événement select_node se déclenche 3 fois .. Donc il y a une certaine connexion avec les événements level et select_node je suppose. Alors, comment pouvons-nous résoudre ce problème en raison de la connexion avec le niveau et sélectionner l'événement

+1

Si cela est le code complet que vous avez , il ne tire qu'une seule fois pour moi - https://fiddle.jshell.net/ermakovnikolay/d1buydyp/. –

+0

Avez-vous essayé différents niveaux de nœuds enfants aussi? Si c'est étrange pour moi pourquoi son déclenchement plus d'un dépend du niveau ... –

+0

Oui, et vous pouvez les essayer aussi dans ce violon. Vous devriez poster plus de votre code –

Répondre

0

Lorsque vous sélectionnez le nœud racine, le code se déclenchera une seule fois. Lorsque vous sélectionnez un nœud enfant, le nœud enfant fait toujours partie du nœud racine. Ainsi, le code se déclenchera une fois pour le nœud enfant et une fois pour le nœud racine.

Si vous deviez avoir 7 niveaux de nœuds enfants, l'événement se déclencherait sept fois.

Un exemple de la façon de le gérer à l'intérieur du gestionnaire d'événements est de vérifier que la cible de l'événement tire sur est la cible actuelle qui a été sélectionné ou cliqué:

this._tree = this.$('.js-tree'); 

if(this._tree.get_node(evt.target) == this._tree.get_node(evt.currentTarget){ 
    //Do event logic 
} else { 
    //Do nothing 
    return; 
}