Как разместить два значения в поле параметра? - PullRequest
3 голосов
/ 06 ноября 2011

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

В раскрывающемся списке извлекаются данные из внешней службы.Это «id» и «name».

Когда я выбираю опцию в раскрывающемся списке, а затем нажимаю «submit», я хочу опубликовать «id» и «name».

Мой код выглядит следующим образом:

<select name="data">
<option>Select a name</option>
<?php foreach($names as $name): ?>
    <option value="<?php echo $name['id']);?>">
       <?php echo $name['name']);?>
    </option>               
<?php endforeach; ?>
</select>

Я попытался вставить скрытое поле ввода, но затем оно не отображает выпадающий список (вместо этого он просто создает список).

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

Любые рекомендации?

Ответы [ 6 ]

12 голосов
/ 06 ноября 2011

Нельзя опубликовать два значения, если оба они не указаны в атрибуте value. Вы можете поместить оба в, разделенные запятой или дефисом и explode() их в PHP:

// Place both values into the value attribute, separated by "-"
<option value="<?php echo $name['id'] . "-" . $name['name']);?>">
   <?php echo $name['name']);?>
</option>      

Получение их в PHP

// split the contents of $_POST['data'] on a hyphen, returning at most two items
list($data_id, $data_name) = explode("-", $_POST['data'], 2);

echo "id: $data_id, name: $data_name";
1 голос
/ 06 ноября 2011

Вы можете добавить скрытое поле с именем «id» и затем привязать прослушиватель события onchange к <select>.внутри функции onchange получите значение <select> и присвойте его полю id.

<form>
<select name="name" onchange="document.getElementById('id').value=this.value">
  <!--
    ...
    options
    ...
  -->
</select>
<input type="hidden" name="id" id="id" />
<input type="submit" />
</form>
0 голосов
/ 13 января 2016

Мы можем передать его с атрибутом данных и получить доступ в js,

<option value="<?php echo $name['id']);?>" data-name="<?php echo $name['name']);?>">One</OPTION>

var name = $(this).find(':selected').data('name');
0 голосов
/ 06 ноября 2011

Вы можете сделать столько скрытых входов, сколько есть вариантов, каждый с именем одного значения параметра. Значения ввода являются содержимым опций. Во втором сценарии вы можете найти раскрывающееся значение, а затем взять значение скрытого ввода с этим именем.

0 голосов
/ 06 ноября 2011

Единственный способ сделать это - включить обе части информации в значение для одной опции.Просто используйте код, подобный следующему, а затем, когда вы вернете значение, разделите строку на первое подчеркивание, чтобы выделить значения.

<select name="data">
<option>Select a name</option>
<?php foreach($names as $name): ?>
    <option value="<?php echo $name['id'] . "_" . $name['name']);?>">
       <?php echo $name['name']);?>
    </option>               
<?php endforeach; ?>
</select>

Кроме того, вы можете просто оставить идентификатор в формеи затем снова посмотрите идентификатор, когда пользователь отправит форму.

0 голосов
/ 06 ноября 2011

Вы можете вывести что-то вроде:

<option value="<?php echo $name['id']."_".$name['name'];?>">

Затем используйте preg_split или explode для их разделения после обработки данных формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...