0

私はこれらの2つの機能を持っています:

$("#form_pdetail").on("click", "#register_button", function() {
    var detail_add = $("#form_pdetail").serialize();
    var request = $.ajax({
        type: 'POST',
        url: "{{ path('product_detail_create') }}",
        data: detail_add,
        success: function() {
            request.abort();
            loadCenterLayout("{{ path('product_detail_list') }}");
        }
    });
});

$("#tree").dynatree({
    checkbox: true,
    children: {% autoescape false %} {{ categories }} {% endautoescape %},
    minExpandLevel: 1,
    selectMode: 3,
    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;
        });
        console.log(selKeys.join(", "));
    },
    onKeydown: function(node, event) {
        if( event.which == 32 ) {
          node.toggleSelect();
          return false;
        }
    }
});

detail_addフォームをシリアル化して送信する前に、2 番目の関数から選択したオプションを最初の関数に渡す必要があります。

4

1 に答える 1

1

dynatree オブジェクトの onSelect イベントで選択したノードを取得する代わりに、ツリーへの参照を取得することで取得できます。

dynaTree のドキュメントから:

var tree = $("#tree").dynatree("getTree");

その後、次のことができるはずです。

var selKeys = $.map(tree.getSelectedNodes(), ..................

フォームの登録ボタンのクリック機能内ですべてを行うことができます。

おそらく次のようなもので:

$("#form_pdetail").on("click", "#register_button", function() {
    var detail_add = $("#form_pdetail").serialize();
    var tree = $("#tree").dynatree("getTree");
    var selKeys = $.map(tree.getSelectedNodes(), function(node) {
        return node.data.key;
    }
    detail_add.selectedItems = selKeys.join(", ");
    var request = $.ajax({
        type: 'POST',
        url: "{{ path('product_detail_create') }}",
        data: detail_add,
        success: function() {
            request.abort();
            loadCenterLayout("{{ path('product_detail_list') }}");
        }
    });
});
于 2013-09-05T19:44:43.913 に答える