Может ли опция в теге 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>
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