2016-07-21 8 views
1

Ich versuche, Werte aus einer Dropdown-Box mit mehreren Auswahlmöglichkeiten in ein Array zu übertragen. Ich bin in der Lage, das zu tun, aber was passiert, ist, dass sie nicht in der Reihenfolge in das Array geschoben werden, in der ich es über Spleiß eingerichtet habe. Es wird in der Reihenfolge hinzugefügt, in der es in der Auswahlbox eingerichtet ist. Wenn ich zum Beispiel die Optionen in der Reihenfolge [467, 341, 344, 657, 677] wähle, zeigt mein Array [344, 467, 677, 341, 657]. Ich möchte, dass das Array in der Reihenfolge angezeigt wird, in der ich die Optionen ausgewählt habe. Das ist mein Code:Wie verschiebt man Werte aus einem Dropdown-Menü mit mehreren Auswahlmöglichkeiten in ein Array?

<select multiple class="yo"> 
    <option value = "344">opt1</option> 
    <option value = "467">opt2</option> 
    <option value = "677">opt3</option> 
    <option value = "341">opt1</option> 
    <option value = "657">opt1</option> 
</select> 

var optVal = new Array(); 
     var tArray; 
     $('.yo').each(function() { 
      var newS = $(this).val(); 
      tArray = newS; 
      optVal.splice(0, 0, tArray); 

     }); 

Bitte helfen!

Hier mein Fiddle ist: https://jsfiddle.net/rprakash/e1xcd2gh/

+0

Warum nicht einfach verwenden '.push()'? Es scheint, als ob Sie einen Event-Handler verwenden, zeigen Sie uns bitte im Code und geben Sie ein ausführbares Beispiel an. Ich kann diese Ergebnisse nicht mit deinem Code erhalten. –

+0

Ich habe eine Geige hinzugefügt! – rashmeePrakash

+0

Erstens "drücken" Sie nicht wirklich etwas in das Array, sondern behalten nur einen einzigen Wert. Auch die Multi-Select-Dosis verfolgt nicht in der Reihenfolge, in der Sie die Elemente ausgewählt haben. Sie wählt alle Elemente zwischen Ihren zwei Klicks aus, und zwar top-down. –

Antwort

1

Wenn Sie nur die Werte innerhalb des select ohne Berücksichtigung Ordnung wollten, könnten Sie verwenden , Sie wollen sie bestellen, die viel Tricker ist:

var optVal = []; 
var tempVal = []; 

$(".yo").change(function() { 

    $(".yo option").each(function() { 
     var val = $(this).val(); 
     var tempVal = $(".yo").val(); 

     if(tempVal.indexOf(val) >= 0 && optVal.indexOf(val) < 0) { 
      optVal.push(val); 
     } else if(tempVal.indexOf(val) < 0 && optVal.indexOf(val) >= 0) { 
      optVal.splice(optVal.indexOf(val) , 1); 
     } 

    }) 
    console.log("Opt: " + optVal); 
}) 
  • Wenn die Werte geändert haben, auslösen
  • Iterate jeden option durch und den Wert
  • bekommen und alle ausgewählten Werte aus den select
  • Wenn die Option ausgewählt ist, und nicht in optVal drückt dann auf optVal
  • Wenn die Option nicht ausgewählt ist und innerhalb von optVal dann von optVal
entfernen

Damit bleiben sie in der Reihenfolge, in der sie ausgewählt wurden.

CodePen: http://codepen.io/theblindprophet/pen/RRrJXG?editors=1010

+0

Großartig! Das funktioniert! Ich habe jedoch eine Frage ... Was ist, wenn ich jedes Element möchte, das ich als nächstes auswähle, möchte ich, dass es zum Index 0 geht. Also jedes Mal, wenn ich eine Option auswähle, möchte ich diesen Wert bei Index 0 – rashmeePrakash

+0

'optVal.unshift (val);' – theblindprophet

+0

Danke !!! Das funktioniert! – rashmeePrakash

0

diesen Code Versuchen:

$(".yo").val() 

jedoch:

var optVal = new Array(); 

$('option').click(function() { 
    optVal.push($(this).val()); 
}); 
+0

Ich habe das versucht. Ich habe kein Ergebnis bekommen. Danke aber – rashmeePrakash

+0

@rashmeePrakash hmm, ich frage mich, warum es nicht funktioniert hat. Hier ist eine Geige davon mit einer Live-Version https://jsfiddle.net/h98sLubr/ – Hopeless

+0

Es tut mir leid! Sie haben Recht! Das klappt auch! – rashmeePrakash