2010-07-14 1 views
73

я отборный тег с некоторыми вариантами в HTML форме:
(данные будут собраны и обработаны с помощью PHP)Может ли опция в теге Select иметь несколько значений?

Testing:

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

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

Как следует проектировать SELECT Tag так, что каждый из вариантов может иметь один, чем одно значение, как это:

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

вы используете PHP в качестве сервера сценария для обработки –

+1

просто интересно, зачем вам это нужно? – Salil

+2

@Salil. Из любопытства, если это возможно, – user327712

ответ

105

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

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

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

+5

+1 для элегантного решения. Нотабене Если вы используете вариант два, то я рекомендую вам использовать $ .parseJSON ($ (this) .val()) в событии изменения, чтобы получить объект javascript, предполагая, что вам нужно получить каждое значение отдельно. –

+1

-1, потому что этот ответ побуждает OP иметь большую проблему безопасности в своем коде при оценке ввода. Лучший способ избежать этого - использовать JSON, как это было предложено @DavidHoerster, потому что ввод лучше. – fotanus

+4

@fotanus: Мой второй пример * - это объектный объект JSON, отличный от того, что предлагает другой вопрос. Что касается массива, это просто пример. В любом случае ответственность за код сервера сводится к дезинфекции входных значений. – Robusto

14

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

как

value ="123,1234" 

и на стороне сервера отделит

+0

как отделить их на стороне сервера? (in php) –

+0

подобный взорвать функция –

+0

спасибо. Он работает –

0

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

3

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

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

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

...

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

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

...

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

3

значения для каждых пут вариантов, как

<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, используйте функции, как взрываются [массив] = взорваться ([разделитель], [отвечали значение]);

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

выше код возврата массива имеют только цифры и символ «:» удаляются

38

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

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 действие (в файле с именем я 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 значение, которое имеет разделитель (в данном случае, '|') для разделения значений (в данном случае, модели и цвета).

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

Я надеюсь, что это помогает кто-то :)

+1

Я нахожу этот метод очень простым и очень полезным, но мне интересно, поддерживается ли этот метод всеми браузерами? –

+0

выглядит очень просто и эффективно. Спасибо –

+0

Блестящий, потрясающий, великолепный .. жемчужина класса – user3370889

9

Когда мне нужно сделать это, я делаю другие значения данных стоимостей, а затем использовать 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> 
+1

. Это помогло мне сделать это. Также можно использовать .data(), чтобы вернуть их, если у вас уже есть элемент (vs do селекторный запрос). например myElem.data ('othervalue') – jsh

+1

Это не технически то, что ОП спрашивает, но это 100%, что я пытался выполнить, когда я пришел искать здесь. +1 для простого, лучшего пути к тому, что я предполагаю, была конечной целью простого хранения двух частей данных в опции выбора. – Lime

-2

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

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

+0

Он хочет получить несколько бит информации из одного выбора, а не из нескольких вариантов. – Barmar

6

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

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

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

0

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

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

}); 
0

Вместо того, чтобы хранить параметры на стороне клиента, другой способ сделать это сохраните параметры в качестве элементов вспомогательного массива ассоциативно-индексированного массива на стороне сервера. Значения тега 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>'; 
Смежные вопросы