2016-06-22 8 views
0

Ich verwende W2UI's multi select, um Elemente auszuwählen. Ich habe die Liste von meinem Server ausgefüllt und enthält rund 800 Elemente.W2UI multi Auswahl, die nicht den letzten Wert zurückgibt

$('#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; 
       } 

Das Problem ist, dass, wenn ich die displayValue Funktion führen Sie die aktuelle Liste der ausgewählten Elemente zu erhalten, das letzte Element fehlt.

Ich habe versucht, ein einfaches Warnfeld auf onAdd und onRemove Option hinzufügen, was ich sehen kann, ist, dass diese Warnungen angezeigt werden, bevor das Element in der Liste dh hinzugefügt wird, wenn ich die Warnung schließe, wird das Element hinzugefügt/von der entfernt Liste.

Meine Anforderung ist, dass ich mein Diagramm aktualisieren möchte, wenn die Liste der ausgewählten Elemente geändert wird (zusammen mit der zuletzt ausgewählten Liste).

Musterkoffer:

Wenn ich 1 Eintrag in der Liste auswählen, wird die Konsole prints "0" Artikel, wieder, wenn ich 2 Artikel auswählen, die Konsole Druck 1 Artikel und so weiter.

Antwort

1

Das Problem, das Sie haben, ist, dass alle event Funktionen von W2UI Multi-Select sind "vor" Ereignisse und nicht nach (die Bibliothek des W2ui triggert die Ereignisse vor dem eigentlichen Ereignis, und nicht danach).

Ich suchte nach after Ereignisse, und konnte keine finden, jedoch - Sie können das Objekt event verwenden, um Informationen über das aktuelle Element zu erhalten, das Ihrem Multi-Select hinzugefügt werden soll.

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

Notiere die e Parameter in dem Funktionsnamen displayValue(e)

Ihrem aktuellen Code habe ich nur noch das neue Element der selectedDish Array:

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); 
} 
+0

Dies ist genau das, was ich hat getan. Aber dieser Ansatz macht das Ganze nur zur Hälfte des Problems lösen. Ich meine, wenn ich eine Suche ausführen möchte, nachdem ein Element hinzugefügt oder entfernt wurde, muss ich die Elemente in einem anderen Array speichern und die Suche danach ausführen, da das 'ausgewählte' die letzte Liste nicht zurückgibt. – driftking9987

Verwandte Themen