Проблема в Dynatree Вставить в формы Пример - PullRequest
0 голосов
/ 08 сентября 2011

Я пытаюсь реализовать встраивание dynatree в пример форм, приведенный на этом сайте.

Это код скрипта:

<script type="text/javascript">
    $(function(){
        $("#tree").dynatree({
        checkbox: true,
        selectMode: 3,
        onSelect: function(select, node) {
    // Display list of selected nodes
    var selNodes = node.tree.getSelectedNodes();
    // convert to title/key array
    var selKeys = $.map(selNodes, function(node){
         return "[" + node.data.key + "]: '" + node.data.title + "'";
    });
    $("#echoSelection4").text(selKeys.join(", "));
  },


            // In real life we would call a URL on the server like this:
//          initAjax: {
//              url: "/getTopLevelNodesAsJson",
//              data: { mode: "funnyMode" }
//              },
            // .. but here we use a local file instead:
            initAjax: {
                url: "sample-data3.json",
                data: { mode: "funnyMode" }
                },
            onActivate: function(node) {
                $("#echoActive").text(node.data.title);
            },
            onDeactivate: function(node) {
                $("#echoActive").text("-");
            }
        });
        $("form").submit(function() {
  // Serialize standard form fields:
  var formData = $(this).serializeArray();

  // then append Dynatree selected 'checkboxes':
  var tree = $("#tree").dynatree("getTree");
  formData = formData.concat(tree.serializeArray());

  // and/or add the active node as 'radio button':
  if(tree.getActiveNode()){
    formData.push({name: "activeNode", value: tree.getActiveNode().data.key});
  }

  alert("POSTing this:\n" + jQuery.param(formData));

  $.post("<?php echo APP_URL;?>admin/submit_data.php",
       formData,
       function(response, textStatus, xhr){
         alert("POST returned " + response + ", " + textStatus);
       }
  );
  return false;
});


    });
</script>

И внутри <body>tag:

<form>
Username: <input type="text" name="userName" />
<br>
<textarea name="comment"></textarea>
<br>
<input type="radio" name="rb1" value="foo" checked> Foo
<input type="radio" name="rb1" value="bar"> Bar
<input type="radio" name="rb1" value="baz"> Baz
<br>
<input type="checkbox" name="cb1" value="John" checked>John
<input type="checkbox" name="cb1" value="Paul">Paul
<input type="checkbox" name="cb1" value="George">George
<input type="checkbox" name="cb1" value="Ringo">Ringo
<br>

<!-- The name attribute is used by tree.serializeArray()  -->
<div id="tree" name="selNodes">
</div>

<input type="submit" value="Send data">

И в submit_data.php у меня есть

print_r($_POST);

Когда я выбираю более одного узла и нажимаю на данные отправки, данные публикуются наsubmit_data.php.Когда я проверяю параметры записи на вкладке консоли через firebug, я получаю следующие данные.

 comment    test
 rb1    foo
 selNodes   restaurant1
 selNodes   screen1
 selNodes   screen2
 selNodes   screen3
 userName   gaurav

Но print_r($_POST) печатает следующие данные:

 Array
(
[userName] => gaurav
[comment] => test
[rb1] => foo
[cb1] => John
[selNodes] => screen3
)

В идеале я должен получить всезначения selNodes.Но, насколько я понимаю, так как имя параметра одно и то же, то есть selNodes для всех узлов, поэтому я получаю только одно значение.

Как мне получить все значения?

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Я не очень разбираюсь в PHP, но некоторые примеры флажков в сети добавляют фигурные скобки к имени элемента для передачи массивов:

<input type="checkbox" name="cb1[]" value="John" checked>John
<input type="checkbox" name="cb1[]" value="Paul">Paul
<input type="checkbox" name="cb1[]" value="George">George
<input type="checkbox" name="cb1[]" value="Ringo">Ringo

Так что вы можете попробовать

<div id="tree" name="selNodes[]">
</div>
0 голосов
/ 27 января 2014

// использовать ajax вместо submit

$("#tree").dynatree({
checkbox: true,      
selectMode: 3,
            title: "mydyna",
            fx: { height: "toggle", duration: 200 },
            autoFocus: false, 
 onSelect: function(select, node) {     
   // Get a list of all selected nodes, and convert to a key array:    
    var selKeys = $.map(node.tree.getSelectedNodes(), function(node){          return node.data.key;        });        
request = $.ajax({ url: "./admin/submit_data.php?getselect=true", type: "post", data: "k="+selKeys.join(", ") }); 
request.done(function (response, textStatus, jqXHR){ $("#ajaxreturn").text( response ); });
   
   },
...