2017-05-31 87 views
2

作成したselect_nodeイベントがあります。しかし、私たちがノードを選択すると、その発射回数は2回になります。ここであなたが変更を見ることができるように、私は2回発射されているselect_nodeイベントを設定します。JSTree select_nodeイベントの2回の実行

また、JStreeの初期化では、チェックイベントを指定しました。

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

これは私がドリルダウンしたとき、我々は最初のレベル(ルート)のノードを選択した場合

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

詳細情報 は、どのような私が見つけたこと、それは、一つだけを発射された私のJStree初期化コードであります2番目のレベルであれば2を、2番目のレベルであれば3番目のレベルでselect_nodeイベントが3回発生します。 レベルとselect_nodeイベントとの接続があります。したがって、レベルと選択イベントとの接続のためにこの問題を解決するにはどうすればいいですか

+1

イベントハンドラ内でそれを処理する方法の例は、イベントが発火している対象が選択またはクリックされた現在のターゲットであることを確認することです、それは私のために一度だけ発火する - https://fiddle.jshell.net/ermakovnikolay/d1buydyp/。 –

+0

異なるレベルの子ノードも試しましたか?もしそれが私にとって奇妙なのであれば、なぜそれ以上のトリガーがレベルに依存するのか... –

+0

はい、あなたもそのフィドルで試すことができます。コードをもっと投稿してください –

答えて

0

ルートノードを選択すると、コードは1回だけ発生します。子ノードを選択すると、子ノードは依然としてルートノードの一部です。そのため、コードは子ノードで1回、ルートノードで1回発生します。

7レベルの子ノードがある場合、イベントは7回発生します。これはあなたが持っている完全なコードである場合

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; 
} 
関連する問題