Я хотел бы опубликовать два значения в одном раскрывающемся списке, и я не уверен в том, как лучше подойти к нему.
Выпадающий список извлекает данные из внешней службы. Этими данными являются «id» и «name».
Когда я выберу вариант в раскрывающемся списке, а затем нажмите кнопку «Отправить», я хочу, чтобы «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>
Я попытался ввести скрытое поле ввода, но это не отображает выпадающее (вместо этого оно просто создает список).
Я использую как id, так и имя в другом месте, поэтому я не хочу публиковать только идентификатор, а затем должен получить имя снова, поэтому я хочу опубликовать оба из них в одно и то же время.
Любые рекомендации?
Вы не можете публиковать два значения, если оба они не появляются в атрибуте 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";
Вы можете добавить скрытое поле с именем «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>
Вы можете вывести что-то вроде:
<option value="<?php echo $name['id']."_".$name['name'];?>">
Затем используйте preg_split
или explode
чтобы разделить их после обработки данных формы.
Единственный способ сделать это – включить обе части информации в значение для единственной опции. Просто используйте код, как показано ниже, а затем, когда вы вернете значение, разделите строку на первом знаке подчеркивания, чтобы выделить значения.
<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>
Кроме того, вы можете просто оставить идентификатор в своей форме, а затем снова просмотреть идентификатор, когда пользователь отправит форму.
Вы можете сделать столько скрытых входов, сколько есть вариантов, каждый из которых имеет имя одного значения параметра. Значения ввода – это содержимое опций. Во втором скрипте вы можете найти значение выпадающего списка, а затем взять значение скрытого ввода с этим именем.
Мы можем передать его атрибутом данных и получить доступ в js,
<option value="<?php echo $name['id']);?>" data-name="<?php echo $name['name']);?>">One</OPTION> var name = $(this).find(':selected').data('name');