wake-up-neo.net

Kann eine Option in einem Select-Tag mehrere Werte enthalten?

Ich habe ein select-Tag mit einigen Optionen in einem HTML-Formular erhalten:
(die Daten werden mit PHP erfasst und verarbeitet)

Testen:

<SELECT NAME="Testing">  
  <OPTION VALUE="1"> One  
  <OPTION VALUE="2"> Two  
  <OPTION VALUE="3"> Three
</SELECT>

Ist es möglich, dass eine Option mehrere Werte enthält, z. B. wenn ein Benutzer "Eins" auswählt, werden einige andere mit dieser Option verknüpfte Werte in die Datenbank geschrieben.

Wie soll ich das SELECT-Tag so gestalten, dass jede der Optionen einen Wert wie diesen tragen kann:

<SELECT NAME="Testing">  
  <OPTION VALUE="1" value="2010"> One  
  <OPTION VALUE="2" value="2122"> Two  
  <OPTION VALUE="3" value="0"> Three
</SELECT>
88
user327712

Eine Möglichkeit, dies zu tun, zuerst ein Array, 2. ein Objekt:

    <select name="">
        <option value="{'num_sequence':[0,1,2,3]}">Option one</option>
        <option value="{'foo':'bar','one':'two'}">Option two</option>
    </select>

Bearbeitet (3 Jahre nach Beantwortung), um beide Werte in das JSON-Format zu konvertieren (mithilfe von JSON.stringify()), weil eine Antwort meiner Proof-of-Concept-Antwort "einen Neuentwickler verwirren konnte".

119
Robusto

Ich habe mich heute tatsächlich gefragt, und ich habe es erreicht, indem ich die PHP-Explosionsfunktion verwendet habe:

HTML-Formular (in einer Datei habe ich 'doublevalue.php' genannt):

    <form name="car_form" method="post" action="doublevalue_action.php">
            <select name="car" id="car">
                    <option value="">Select Car</option>
                    <option value="BMW|Red">Red BMW</option>
                    <option value="Mercedes|Black">Black Mercedes</option>
            </select>
            <input type="submit" name="submit" id="submit" value="submit">
    </form>

PHP-Aktion (in einer Datei namens doublevalue_action.php)

    <?php
            $result = $_POST['car'];
            $result_explode = explode('|', $result);
            echo "Model: ". $result_explode[0]."<br />";
            echo "Colour: ". $result_explode[1]."<br />";
    ?>

Wie Sie im ersten Teil des Codes sehen können, erstellen wir eine Standard-HTML-Auswahlbox mit zwei Optionen. Jede Option hat einen Wert mit einem Trennzeichen (in diesem Fall '|'), um die Werte (in diesem Fall Modell und Farbe) aufzuteilen.

Auf der Aktionsseite zerreiße ich die Ergebnisse in ein Array und rufe dann jedes auf. Wie Sie sehen können, habe ich sie getrennt und mit einem Etikett versehen, damit Sie sehen können, welche Auswirkungen dies hat. 

Ich hoffe das hilft jemandem :)

44
Nedra

eine Möglichkeit besteht darin, den Mehrfachwert durch Kommas zu trennen

mögen 

value ="123,1234"

und auf der Server-Seite trennen Sie sie

15
Haim Evgi

es ist möglich, mehrere Werte in einer Auswahloption zu haben (siehe unten).

<select id="ddlEmployee" class="form-control">
    <option value="">-- Select --</option>
    <option value="1" data-city="Washington" data-doj="20-06-2011">John</option>
    <option value="2" data-city="California" data-doj="10-05-2015">Clif</option>
    <option value="3" data-city="Delhi" data-doj="01-01-2008">Alexander</option>
</select>

sie können den ausgewählten Wert für das Änderungsereignis mithilfe von jquery erhalten, wie unten gezeigt.

$("#ddlEmployee").change(function () {
     alert($(this).find(':selected').data('city'));
});

Weitere Details finden Sie in diesem LINK

15
Vara

Wenn ich dies tun muss, mache ich die anderen Werte zu Datenwerten und verwende sie dann mit js einer verborgenen Eingabe

<select id=select>
<option value=1 data-othervalue=2 data-someothervalue=3>
//...
</select>

<input type=hidden name=otherValue id=otherValue />
<input type=hidden name=someOtherValue id=someOtherValue />

<script>
$('#select').change(function () {
var otherValue=$(this).find('option:selected').attr('data-othervalue');
var someOtherValue=$(this).find('option:selected').attr('data-someothervalue');
$('#otherValue').val(otherValue);
$('#someOtherValue').val(someOtherValue);
});
</script>
11
chiliNUT

Wenn Sie diese Informationen in die Datenbank schreiben möchten, müssen Sie dann einen primären Wert und 'verwandte' Werte im value-Attribut haben. Warum nicht einfach den Primärwert an die Datenbank senden und den Rest für die relationale Natur der Datenbank sorgen.

Wenn Sie mehrere Werte in Ihrer OPTIONs benötigen, versuchen Sie es mit einem Trennzeichen, das nicht sehr häufig vorkommt:

<OPTION VALUE="1|2010">One</OPTION>

...

oder fügen Sie ein Objektliteral (JSON-Format) hinzu:

<OPTION VALUE="{'primary':'1','secondary':'2010'}">One</OPTION>

...

Es hängt wirklich davon ab, was Sie zu tun versuchen.

4
David Hoerster

setzen Sie Werte für jede Option wie 

<SELECT NAME="val">
   <OPTION VALUE="1" value="1:2:3:4"> 1-4  
   <OPTION VALUE="2" value="5:6:7:8"> 5-8  
   <OPTION VALUE="3" value="9:10:11:12"> 9-12
</SELECT>

auf der serverseite im falle von php verwenden sie funktionen wie explode [array] = explode ([delimeter], [posted value]);

$values = explode(':',$_POST['val']

der obige Code gibt ein Array zurück, das nur die Nummern enthält und das ':' entfernt wird

3
Jaison Justus

Ich habe dies mit Datenattributen gemacht. Ist viel sauberer als andere Methoden, die versuchen zu explodieren usw.

HTML

<select class="example">
    <option value="1" data-value="A">One</option>
    <option value="2" data-value="B">Two</option>
    <option value="3" data-value="C">Three</option>
    <option value="4" data-value="D">Four</option>
</select>

JS

$('select.example').change(function() {

    var other_val = $('select.example option[value="' + $(this).val() + '"]').data('value');

    console.log(other_val);

});
2
Jack Nicholson

Verwenden Sie ein Trennzeichen, um die Werte zu trennen.

<select name="myValues">
<option value="one|two">
</select>

<?php>
$value = filter_input(INPUT_POST, 'myValues');
$exploded_value = explode('|', $value);
$value_one = $exploded_value[0];
$value_two = $exploded_value[1];
?>
1
Chad C.

Anstatt die Optionen auf der Clientseite zu speichern, können Sie die Optionen auch als Unterarray-Elemente eines assoziativen/indizierten Arrays auf der Serverseite speichern. Die Werte des select-Tags enthalten dann nur die Schlüssel, mit denen das Subarray dereferenziert wird.

Hier ist ein Beispielcode. Dies ist in PHP geschrieben, seit das OP PHP erwähnt hat, es kann jedoch an jede serverseitige Sprache angepasst werden, die Sie verwenden:

<FORM action="" method="POST">
    <SELECT NAME="Testing">  
        <OPTION VALUE="1"> One </OPTION> 
        <OPTION VALUE="2"> Two </OPTION>
        <OPTION VALUE="3"> Three </OPTION>
    </SELECT>
</FORM>

PHP:

<?php
$options = array(
    1 => array('value1' => '1', 'value2' => '2010'),
    2 => array('value1' => '2', 'value2' => '2122'),
    3 => array('value1' => '3', 'value2' => '0'),
);
echo 'Selected option value 1: ' . $options[$_POST['Testing']]['value1'] . '<br>';
echo 'Selected option value 2: ' . $options[$_POST['Testing']]['value2'] . '<br>';
0
Kodos Johnson

Doppelte Tag-Parameter sind in HTML nicht zulässig. Was Sie tun könnten, ist VALUE="1,2010". Sie müssten jedoch den Wert auf dem Server analysieren.

0
Witek