【问题标题】:DHTMLX Multiselect Drop-down Checkbox filter for Gantt Chart甘特图的 DHTMLX 多选下拉复选框过滤器
【发布时间】:2017-04-13 17:16:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript html checkbox dhtmlx gantt-chart


    【解决方案1】:

    Your combo adds an onBeforeTaskDisplay handler each time user checks combo value, while never removing previously added handlers when an option becomes unchecked/unselected. 我建议将组合框选择存储在某个范围变量中,并仅声明一个 onBeforeTaskDisplay 处理程序,该处理程序将根据该变量的值过滤甘特图。

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

    您的代码可能如下所示:

    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];
        });
    }
    

    【讨论】:

    • 嗨,Alex,非常感谢您的回答,您是救生员。它可以工作,但是我还需要一个组合框来编写它与此类似但有点不同的方法,我可能在不久的将来再次需要你的帮助,会继续发帖,再次感谢。会支持你的答案,但不幸的是,我目前的声誉不到 15 个
    • 你好@alex-klimenkov,我有另一个问题需要你帮助 1) 我如何更改组合框的位置(填充/边距)?我尝试使用 css 并没有用
    • 2) 现在我试图从 json 文件中调用
    • 嗨! 1)你的意思是dhtmlx组合的定位?您可以使用选择器应用边距:snippet.dhtmlx.com/e0eec8f96(检查 html 选项卡中的 html/css)以这种方式应用的填充效果不会太好,因为组合内的元素是绝对定位的。更简单的解决方案是将组合包装到某个 div 中并定位该外部 div - snippet.dhtmlx.com/5cc26e64f
    • 2) 组合期望 json 有点不同: - { "options" : [ {"value":"id", "text":"label"}, ...] } 这里是工作文件的样本s3.amazonaws.com/uploads.hipchat.com/15721/63476/…
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 2016-07-22
    • 2014-08-27
    • 1970-01-01
    • 2011-06-03
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多