2017-01-02 1 views
0

ich das angepasste Plugin genommen haben, die das Merkmal für optgroup gibt, die hier Add scroll position return on select1. Add optgroup capabilityArtikel bewegt sich auf Mausklick in Bootstrap-duallistbox

Customized bootstrap-duallistbox (with optgroup feature)

ich eine Probe Beispiel geschaffen gegeben wird Plunker, der ein laufendes Beispiel zeigt. Die Optionsgruppe funktioniert gut, aber das Problem ist, dass selbst wenn ich setzen move-on-select = "false" immer noch Item bewegt sich auf Mausklick.

Kann jemand mir bitte erklären, warum dies so

verhalten wird

Working Plunker

<select ng-model="modal.selectedItems" 
         ng-options="item.name group by item.app for item in modal.allItems" 
         multiple 
         bs-duallistbox 
         move-on-select=false 
    ></select> 
+0

Es ist 'moveOnSelect' nicht' move-on-select'. siehe den Link: http://www.virtuosoft.eu/code/bootstrap-duallistbox/ –

+0

@prakashtank Danke für die Antwort, 'moveOnSelect: false' ist auf der Skriptseite erwähnt werden, ich habe das bereits zu false in das 'jquery.dlbx.js', immer noch hat es nicht funktioniert. 'move-on-select'ist winklig Direktive –

Antwort

1

Ehrlich gesagt ist die einfachste Lösung nur die Implementierung von selectGroup zu ändern. Ich denke, es sollte sein:

function selectGroup(e) { 
    if(e.data.dlb.settings.moveOnSelect) { 
    move(e.data.dlb); 
    } 
    e.preventDefault(); 
} 

Sie werden wahrscheinlich eine ähnliche Änderung unselectGroup machen wollen. Die aktuelle Implementierung hat ein merkwürdiges Verhalten, bei dem Dinge, die nicht ausgewählt sind, verschoben werden, da sie niemals alles richtig abwählen.

Edit:

Die Art und Weise, die Auswahl getroffen werden, ist fehlerhaft. Ich habe keine Ahnung von der Absicht des Autors, aber ich vermute, diese Implementierung ist näher an, was ein Benutzer erwarten würde:

function selectGroup(e) { 
    if (e.target.tagName != 'OPTGROUP') return; 
    $(this).find('option').each(function (index, item) { 
    var $item = $(item); 
    if (!$item.data('filtered1')) { 
     if (!$item.prop('selected')) { 
     $item.prop('selected', true); 
     } else { 
     $item.removeAttr('selected'); 
     } 
    } 
    }); 
    if(e.data.dlb.settings.moveOnSelect) { 
    move(e.data.dlb); 
    } 
    e.preventDefault(); 
} 

Wieder eine ähnliche Änderung unselectGroup machen. Im ursprünglichen Code war das Problem, dass wenn Sie auf eine einzelne option klicken, würde der Klick auf die optgroup, daher die if Wache Blase. Außerdem sollte der Auswahlstatus nicht direkt geändert werden. Dies wird bereits in der move Funktion behandelt. Es ist viel netter, das selected Attribut zu ändern, das die move Funktion später verdaut. Auf diese Weise wird auch visuell deutlich, was tatsächlich ausgewählt wird. Wenn Sie also auf eine optgroup klicken, sollte diese Option bei allen Elementeigenschaften aktiviert werden. Möglicherweise möchten Sie ändern, wie die Entfernung des ausgewählten Attributs erfolgt.

+0

Ich habe getan, was Sie vorgeschlagen haben, jetzt glücklich zu sehen, dass Mausklick Element verschieben Problem gelöst ist, aber jetzt das Problem ist, lassen Sie uns sagen, ich wähle ein Element aus der Gruppe und dann wenn ich Klicken Sie auf den Knopf, um sich zu bewegen, dann bewegt sich die ganze Gruppe nach rechts. Werfen Sie einen Blick auf diese [Plunker] (https://plnr.r.co/edit/tdhCTZyvPqmQPZZqj4cQ?p=preview) –

+0

Siehe aktualisierte Post für eine Lösung für diese. Dies ist das erste Mal, dass ich mir die Bibliothek anschaue, also weiß ich eigentlich nicht, was die ursprüngliche Absicht des Autors ist, aber das scheint mir am intuitivsten zu sein. – ppham27