gpt4 book ai didi

javascript - 用于甘特图的 DHTMLX 多选下拉复选框过滤器

转载 作者:行者123 更新时间:2023-11-30 15:23:15 25 4
gpt4 key购买 nike

我正在尝试使用下拉复选框列表来过滤我的甘特图。这是我的代码

index.html

<label class="text-primary" for="department">Select by Departments: </label>
<select id="department" style="width:200px; height:20px; " mode="checkbox">
<option value="ALL" selected="1" >ALL</option>
<option value="ARTIST">ARTIST</option>
<option value="ADMIN">ADMIN</option>
<option value="LEAD">LEAD</option>
<option value="HR">HR</option>
<option value="PRODUCTION">PRODUCTION</option>
<option value="MANAGEMENT">MANAGEMENT</option>
<option value="TECHNOLOGY">TECHNOLOGY</option>
</select>

函数

<script>
var myCombo;
function checkbox_department() {
myCombo = dhtmlXComboFromSelect("department");
myCombo.attachEvent("onCheck", function(value, state){
gantt.attachEvent("onBeforeTaskDisplay", function (id, task) {
var department_value = value

if (task.job_category == department_value || department_value == 'ALL') {
console.log(value);
return true;
}
});
gantt.render();
});

}

</script>

job_category 来自 JSON 文件。

到目前为止,我设法使用我选中的任何第一个复选框来过滤甘特图,但是当我选中另一个复选框时,假设我选中了艺术家和制作,一切都消失了,它会显示在控制台日志中

3PRODUCTION
7ARTIST
2PRODUCTION
52ARTIST
PRODUCTION
51ARTIST
2PRODUCTION
3ARTIST
PRODUCTION
22ARTIST

结果会是这样,如果我只是在屏幕上打印整个内容会更容易,但我正在使用我的办公室桌面并且文件上传被阻止。谁能帮我解决这个问题,在此先感谢

最佳答案

每次用户检查组合值时,您的组合都会添加一个 onBeforeTaskDisplay 处理程序,而当选项未选中/未选择时,永远不会删除以前添加的处理程序。我建议将组合框选择存储在某个范围变量中,并仅声明一个 onBeforeTaskDisplay 处理程序,该处理程序将按该变量的值过滤甘特图。

然后,在组合的 onCheck 处理程序中,您使用组合的选择状态更新范围变量并调用甘特重绘以调用过滤

您的代码可能如下所示:

var myCombo;
function checkbox_department() {
var department_value = 'ALL';

myCombo = dhtmlXComboFromSelect("department");
myCombo.attachEvent("onCheck", function(value, state){
department_value = value;// put combo value into scope variable
gantt.render();// and repaint gantt
});

// filter gantt by value of the scope variable
gantt.attachEvent("onBeforeTaskDisplay", function (id, task) {
if (task.job_category == department_value || department_value == 'ALL') {
console.log(value);
return true;
}
});
}

这里是一个简化的演示,以防我在解释和代码示例中出错 http://docs.dhtmlx.com/gantt/snippet/b6053d50

更新:

如果您有一个多选组合,您可能需要一些不同的代码。以下内容应该有效:

var myCombo;
function checkbox_department() {
var department_value = {'ALL': true};

myCombo = dhtmlXComboFromSelect("department");
myCombo.attachEvent("onCheck", function(value, state){
var values = myCombo.getChecked();
department_value = {};// put combo value into scope variable
for(var i = 0; i < values.length; i++){
department_value[values[i]] = true;// build hash for easy check later
}
gantt.render();// and repaint gantt
});

// filter gantt by value of the scope variable
gantt.attachEvent("onBeforeTaskDisplay", function (id, task) {
if(department_value['ALL'])
return true;

return !!department_value[task.job_category];
});
}

关于javascript - 用于甘特图的 DHTMLX 多选下拉复选框过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com