Может ли опция в теге Select нести несколько значений?



я получил тег select с некоторыми опциями в HTML-форме:

(данные будут собраны и обработаны с помощью PHP)



тестирование:



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


возможно ли, чтобы опция несла несколько значений, например, когда пользователь выбирает
"Один", то несколько других значений, связанных с этой опцией будут записаны в базу данных.



как я должен дизайн SELECT тег, так что каждый из вариантов может нести только один стоимость такой:



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

12 ответов:

один из способов сделать это, сначала один массив, 2-й объект:

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

отредактировано (через 3 года после ответа), чтобы поместить оба значения в формат JSON (используя JSON.stringify()) из-за жалобы, что мой ответ на доказательство концепции "может запутать разработчика-Новичка."

мне действительно было интересно это сегодня, и я достиг этого с помощью функции PHP explode, например:

HTML форма (в файле я назвал ' doublevalue.php':

    <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 action (в файле я назвал doublevalue_action.php)

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

Как вы можете видеть в первом фрагменте кода, мы создаем стандартное поле выбора HTML с двумя вариантами. Каждый параметр имеет 1 значение, которое имеет разделитель (в данном случае '|') для разделения значений (в данном случае модель и цвет).

на странице действия я взрываю результаты в массив, а затем вызываю каждый из них. Как вы можете видеть, я разделил и обозначил их, чтобы вы могли видеть эффект, который это вызывает.

надеюсь, это кому-то поможет :)

один из вариантов заключается в том, чтобы поместить несколько значений с разделенными запятыми

как

value ="123,1234"

а на стороне сервера их разделяют

его можно иметь несколько значений в опции выбора, как показано ниже.

<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>

вы можете получить выбранное значение при изменении события с помощью jquery, как показано ниже.

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

Вы можете найти более подробную информацию в этой ссылке

когда мне нужно это сделать, я делаю другие значения data-values, а затем использую js, чтобы назначить их скрытому входу

<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>

если ваша цель-записать эту информацию в базу данных, то зачем вам нужно иметь первичное значение и "связанные" значения в ? Почему бы просто не послать первичное значение в базу данных и позвольте реляционной базы данных позаботится об остальном.

Если вам нужно иметь несколько значений в вашем OPTIONs, попробуйте разделитель, который не очень распространен:

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

...

или добавить литерал объекта (JSON формат):

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

...

Это действительно зависит от того, что ты пытаешься сделать.

поставить значения для каждого варианта, как

<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>

на стороне сервера в случае php используйте такие функции, как explode [array] = explode([delimeter],[posted value]);

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

приведенный выше код возвращает массив имеют только числа и': 'Get removed

Я сделал это с помощью атрибутов данных. Намного чище, чем другие методы, пытающиеся взорвать и т. д.

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);

});

повторяющиеся параметры тегов не допускаются в HTML. То, что вы могли бы сделать, это VALUE="1,2010". Но вам придется проанализировать значение на сервере.

вместо того, чтобы хранить параметры на стороне клиента, другой способ сделать это-сохранить параметры как элементы подрешетки ассоциативного/индексированного массива на стороне сервера. Тогда значения тега select будут содержать только ключи, используемые для разыменования суб-массива.

вот пример кода. Это написано на PHP, так как OP упоминал PHP, но он может быть адаптирован к любому серверному языку, который вы используете:

<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>';

используйте разделитель для разделения значений.

<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];
?>

вы можете использовать несколько атрибутов

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

Comments

    Ничего не найдено.