选择节点时,JsTree提交表单

时间:2017-11-22 10:02:29

标签: javascript php jquery jstree

我使用JsTree创建树结构,显示效果很好。我用无序的HTML列表填充树,每个列表元素都有一个保存在"标题"属性。

我想要做的是,当用户选择一个节点时,会提交一个运行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中编码。

1 个答案:

答案 0 :(得分:0)

看一下这个解决方案 - 这允许选择多个节点并将它们附加到你的#total字段的json中(在片段中显示为可见)。在这种情况下,您需要在选择最后一个项目后单独处理表单(您可以在按住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="">

相关问题