2016-03-30 10 views
2

ich unten Code verwenden für Multi bevöl wählen:jquery-select2 ersten Wert standardmäßig ausgewählt zeigt

<s:select id = "deviceTypes" 
      name = "serviceVO.deviceTypes" 
     multiple = "multiple" 
     required = "true" 
    onBeforeTopics = "openLoader" 
onCompleteTopics = "closeLoader" 
      key = "service.authoring.label.deviceTypes" 
     tooltip = "%{getText('service .authoring.label.deviceTypes.info')}" 
      list = "deviceTypesList" 
     listKey = "value" 
     listValue = "name" 
     cssClass = "search-val form-control" /> 

und auf document.ready Ich rufe:

$("#deviceTypes").attr("multiple","true"); 
$("#deviceTypes").select2(); 

Damit es zeigt Standardmäßig ist der erste Optionswert beim Laden der Seite ausgewählt, den ich nicht möchte. Ich möchte, dass der Benutzer Werte auswählt. Sobald der Benutzer das Formular absendet, werden die ausgewählten Werte in der Auswahlbox angezeigt und der Benutzer kann Werte hinzufügen oder entfernen.

+0

@PracheerPanchoi ich mit dem Code verwirrt bin. Verwenden Sie 's: select' oder' sj: select'. Das 's: select' hat nicht' onBeforeTopics' oder 'onCompleteTopics' –

Antwort

2

Das key Attribut ist eine Abkürzung, um mit dem gleichen Wert drei Attribute zu setzen: name, value, label.

Wie Sie wissen sollten, value (falls vorhanden) voreingestellt der Wert des Elements, während name verwendet wird, um die Parameter zurück auf die Aktion zu senden, und den Wert voreinzustellen, falls value fehlt.

Dann ist die Verwendung von key in Verbindung mit einem der oben genannten Attribute irreführend und falsch.
Tropfen key verwenden label statt:

<s:select id = "deviceTypes" 
      name = "serviceVO.deviceTypes" 
     multiple = "multiple" 
     required = "true" 
    onBeforeTopics = "openLoader" 
onCompleteTopics = "closeLoader" 
      label = "service.authoring.label.deviceTypes" 
     tooltip = "%{getText('service .authoring.label.deviceTypes.info')}" 
      list = "deviceTypesList" 
     listKey = "value" 
     listValue = "name" 
     cssClass = "search-val form-control" /> 

Beachten Sie, dass serviceVO.deviceTypes ein action-Attribut mit einem Getter sein muss, vom Typ List (oder was auch immer), die Null das erste Mal ist, und enthält die ausgewählten Werte der nächsten mal lesen.

+0

deviceTypesList ich bevölkere vor dem Laden der Seite. Ist es möglich ohne Ajax, wenn ich bereits eine Liste habe, dann kann ich standardmäßig leer auswählen, aber wenn der Benutzer auf das Auswahlfeld klickt, wird eine Liste angezeigt. –

+0

Nicht sicher, was das bedeutet ... zu kryptisch für mich, sorry –

+0

@PracheerPancholi Ich denke, Sie möchten, dass Ihre Auswahlbox einen Standardtext zum Beispiel 'Bitte wählen Sie einen Gerätetyp' oder nur eine einfache leere Option als erste Option zeigt. Hab ich recht ?! –

1

Immer noch nicht genau das, was Sie wollen.

Aber ich denke, dass Sie dies mit etwas Java Script Code tun können. Erstellen Sie eine s:select oder sj:select, die die Optionen mit all Ihren Daten enthält, aber durch unsichtbar machen. Machen Sie eine zweite Auswahlbox als normal html select mit einer leeren Option, das sieht der Benutzer. Ihr Hauptauswahlfeld wird also das erste Mal geladen, wenn die Seite geladen wird, der Benutzer sie jedoch nicht sehen kann.

Sie können es sichtbar machen, wenn der Benutzer einige Aktionen ausführt, z. B. auf ein Kontrollkästchen klicken.

Allerdings reicht das Senden des Formulars nicht ALLE Auswahloptionen an den Server, nur die ausgewählte Option wird an den Server gesendet.

0

konnte ich mit dem Code unten auf Seite Last tun:

$("#deviceTypes").attr("multiple","true"); 
$("#deviceTypes").select2(); 
var selectedDevice=[]; 
var deviceList = '<s:property value="serviceVO.packagedService.deviceType" />'; 
$.each(deviceList, function(index,value) { 
    selectedDevice.push(value); 
    }); 
$("#deviceTypes").select2("val", selectedDevice); 
Verwandte Themen