2017-11-22 23 views
0

私はツリー構造を作成するためにJsTreeを使用していますが、表示はうまくいきます。私は、順序付けられていないHTMLリストをツリーに入れています。各リスト要素には、 "title"属性の下に保存された値があります。ノードが選択されたときにJsTreeフォームを送信

私がしたいのは、ユーザーがノードを選択すると、objectQuery.phpを実行するフォームが送信されるということです。

<form id="sampleForm" name="sampleForm" method="post" action="objectQuery.php"> 
<input type="hidden" name="userInputObject" id="total" value=""> 

私は通常のJavascriptやJsTreeを使用していないので、私はそれのいずれかの経験を持っていないと私は尋ねた同様の質問を見て、のように見えるスクリプトの私の独自のバージョンを試してみましたこの。

ツリーは、このスクリプトでのように作成されます。

<script> 
    $(function() { $('#treeViewer').jstree(); }); 
</script> 

そして私がフォームを送信してobjectQuery.phpに値を渡すために、他の質問をしようとした:今

<script> 
    $("#treeViewer").on("select_node.jstree", function(e){ 

      var selected_titles = []; 
      $("#treeViewer").jstree('get_selected').each(function() { 
       document.sampleForm.userInputObject.value = selected_titles.push(this.title); 
       document.forms["sampleForm"].submit(); 

      }); 

      // $.post("objectQuery.php"); 
     } 
    ); 
</script> 

とき私はノードを選択しますが、何も起こりません。誰かが正しい方向に私を押してください。

もう一度このトピックに関する他の質問と似ていますが、私は他の質問を見て、しばらく私自身で試してみました(そうでなければ、私は最初からそのスクリプトを作成できませんコードはjavascriptではありません)。

答えて

0

この解決策を見てください - 複数のノードを選択し、それらをjsonに#totalフィールドに追加することができます(スニペットのデモンストレーションのために表示されます)。この場合、最後の項目が選択された後に別途フォームの提出を処理する必要があります(CTRLまたはSHIFTを押しながら項目をさらに選択できます)。最初に選択したものだけを自動提出する場合は、#totalフィールドを設定した直後に送信コードを入力します。

$(function() { 
 
    $('#treeViewer').jstree(); 
 
    $("#treeViewer").on("select_node.jstree", function(e){ 
 
      var selected_titles = []; 
 
      var selectedIndexes = $("#treeViewer").jstree("get_selected", true); 
 
      $.each(selectedIndexes,function() { 
 
       selected_titles.push(this['li_attr'].title); 
 
      }); 
 
      $("#total").val(JSON.stringify(selected_titles)) 
 
      // for plaintext 
 
      $("#total_plain").val(selected_titles.join(",")) 
 
     } 
 
    ); 
 
    }); 
 
    
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.4/jstree.min.js"></script> 
 
<link rel="stylesheet" href="https://static.jstree.com/latest/assets/dist/themes/default/style.min.css"/> 
 

 
<div id="treeViewer"> 
 
    <ul> 
 
    <li title="val1">Root node 1</li> 
 
    <li title="val2">Root node 2</li> 
 
    <li title="val3">Root node 3</li> 
 
    <li title="val4">Root node 4</li> 
 
    <li title="val5">Root node 5</li> 
 
    </ul> 
 
</div> 
 

 
<input type="text" name="userInputObject" id="total" value=""> 
 
<br> 
 
<input type="text" id="total_plain" value="">

+0

非常に多くのマイクをありがとう、私は自分のアプリケーションにそれを調整し、それが働いている:D私はちょうど好奇心が強い、私はあなたのコードで非常に詳細に見えたが、原因を見つけることができませんでした末尾に["beginnginと"]で表示されるタイトル値。私はstr_replaceによってそれらを取り除きましたが、最初に何が表示されるのか不思議です。 –

+0

これはJSON.stringifyの出力で、selected_titles配列の文字列表現を返します。プレーンテキストだけが必要な場合は、 'selected_titles.join("、 ")'を実行することができます。答えの更新されたスニペットを参照してください –

+0

ああ、ちょうど不思議だった。あなたの時間をもう一度ありがとう。あなたは大きな助けとなりました。 –

関連する問題