我正在使用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
函数以获取所选项目的最新列表时,最后一项缺失。
我尝试在onAdd
和onRemove
选项上添加一个简单的提醒框,我可以看到,这些提醒会在项目添加到列表中之前出现,即当我关闭提醒时,项目已从列表中添加/删除。
我的要求是,我想在更改所选项目列表时刷新我的图表(以及最新选择的列表)。
示例案例
当我在列表中选择1项时,控制台会打印&#34; 0&#34;项目,当我选择2项时,控制台打印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);
}