W2UI多选不返回最新值

时间:2016-06-22 11:11:36

标签: javascript jquery w2ui

我正在使用W2UI's multi select来选择项目。 我已经从我的服务器填充了列表,其中包含大约800个项目。

$('#enum').w2field('enum', { 
                    items: arrDish, 
                    openOnFocus: true,
                    //onNew: displayValue,
                    onAdd: displayValue,
                    //markSearch:true,
                    onRemove: function (event) {
                        alert("removed");

                    },

                    renderItem: function (item, index, remove) {
                        var html = remove + '<span class="fa-trophy" style="'+ pstyle +'; margin-left: -4px;"></span>' + item.text;
                        //displayValue();
                        return html;


                    },
                    renderDrop: function (item, options) {
                        return '<span class="fa-star" style="'+ pstyle +'"></span>' + item.text;

                    }


                });
                function displayValue() { 
                    console.log($('#enum').data('selected'));
                    selectedDish=getCol($('#enum').data('selected'),'text');
                    console.log(selectedDish); // am getting the values in the console log here but without the latest item
                }
                //below function is also working properly
                function getCol(matrix, col){
                    var column = [];
                    for(var i=0; i<matrix.length; i++){
                        column.push(matrix[i][col]);
                    }
                    return column;
                }

问题在于,当我执行displayValue函数以获取所选项目的最新列表时,最后一项缺失。

我尝试在onAddonRemove选项上添加一个简单的提醒框,我可以看到,这些提醒会在项目添加到列表中之前出现,即当我关闭提醒时,项目已从列表中添加/删除。

我的要求是,我想在更改所选项目列表时刷新我的图表(以及最新选择的列表)。

示例案例

当我在列表中选择1项时,控制台会打印&#34; 0&#34;项目,当我选择2项时,控制台打印1项,依此类推。

1 个答案:

答案 0 :(得分:1)

你遇到的问题是W2UI多选的所有event函数都是“之前”事件,而不是之后(w2ui的库在实际事件之前触发事件,而不是之后)。 / p>

我搜索了after个事件,然后找不到任何事件 - 您可以使用event对象获取有关当前项目的信息,这些信息即将添加到您的多个事件中选择。

function displayValue(e) {
    console.log($('#enum').data('selected'));
    consloe.log(e.item);
}
  

请注意函数名e

中的displayValue(e)参数

使用您当前的代码我刚将新项目添加到selectedDish数组:

function displayValue(e) {
    // The item that we got in this event:
    console.log(e.item);

    // The data we selected before the selection of the new item
    console.log($('#enum').data('selected'));

    // Array of the current selected items
    selectedDish=getCol($('#enum').data('selected'),'text');

    // Add the text of the item we selected
    selectedDish.push(e.item.text)

    // Now the selectedDish contains all the values, including the last one that was selected
    console.log(selectedDish); 
}