JS / JSTree语法与数组的

时间:2016-05-30 15:59:56

标签: javascript jstree

好的,我可以用Delphi和PHP编写代码。这个JS让我很困惑。

我要做的是,使用jstree,显示在网页上选择哪些节点并将CSV传递给表单变量。

这是HTML

<div id="event_result">&nbsp;</div>

<form action="" method="post">
<input type="hidden" name="evtstotal" id="evtstotal">
</form>

我有这个js代码,它完美无缺。当我选择一个jstree节点时它会更新event_result,并在我提交表单时将CSV传递给evtstotal:

 function (e, data) {
    var z, i, j, r = [];
    for(i = 0, j = data.selected.length; i < j; i++) {
         if (data.instance.get_node(data.selected[i]).id > 0) {
              r.push(data.instance.get_node(data.selected[i]).id);
         }
    }
    $('#event_result').html('Selected:<br /> ' + r.join(', '));
    var element = document.getElementById("evtstotal");
    element.value = r.join(', ');
})

我要做的是在页面上显示所选节点的文本值,并将所选节点的id值传递给表单。

如果我将r数组更改为此数组,它仍然有效并传递文本:

  r.push(data.instance.get_node(data.selected[i]).text);

但是,如果我尝试推送两个数组,则不起作用:

 function (e, data) {
    var z, i, j, r = [];
    for(i = 0, j = data.selected.length; i < j; i++) {
         if (data.instance.get_node(data.selected[i]).id > 0) {
              r.push(data.instance.get_node(data.selected[i]).id);
              z.push(data.instance.get_node(data.selected[i]).text);
         }
    }
    $('#event_result').html('Selected:<br /> ' + z.join(', '));
    var element = document.getElementById("evtstotal");
    element.value = r.join(', ');

我试过这个,如果我尝试只推送一个数组,但不是两个都可以。

 var data = data.instance.get_node(data.selected[i]);
 r.push(data.id);
 z.push(data.text);

我猜我的语法错误,或者我只是不理解js背后的逻辑。 Chrome告诉我:“Uncaught TypeError:无法读取未定义的属性'push'”。任何帮助将不胜感激。

这是完整的脚本部分......工作:

<script>
$('#evts')
    .on("changed.jstree", function (e, data) {
        var z, i, j, r = [];
        for(i = 0, j = data.selected.length; i < j; i++) {
            if (data.instance.get_node(data.selected[i]).id > 0)
            {
                r.push(data.instance.get_node(data.selected[i]).id);
            }
        }
        $('#event_result').html('Selected:<br /> ' + r.join(', '));
        var element = document.getElementById("evtstotal");
        element.value = r.join(', ');
    })
.jstree({
    'core' : {
        'multiple' : true,
        'data' : 
            [
                <?php echo json_encode($catarray) ?>
            ]
        }
    });
</script>

0 个答案:

没有答案