好的,我可以用Delphi和PHP编写代码。这个JS让我很困惑。
我要做的是,使用jstree,显示在网页上选择哪些节点并将CSV传递给表单变量。
这是HTML
<div id="event_result"> </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>