如何在选项字段中发布两个值?

问题描述 投票:3回答:6

我想在一个下拉选项中发布两个值,我不确定接近它的最佳方法。

下拉列表从外部服务中提取数据。这些数据是'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和name,所以我不想只发布id,然后必须再次获取名称,因此我想同时发布它们。

有什么建议?

php html post
6个回答
12
投票

您不能发布两个值,除非它们都出现在value属性中。您可以将两者放在一起,用逗号或连字符分隔,并在PHP中分开explode()

// 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
投票

您可以添加名为“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
投票

你可以输出如下内容:

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

然后在处理表单数据后使用preg_splitor explode将两者分开。


0
投票

执行此操作的唯一方法是在单个选项的值中包含两条信息。只需使用如下代码,然后当您获得值时,将字符串拆分为第一个下划线以分隔出值。

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

此外,您可以只在表单中保留ID,然后在用户提交表单时再次查找ID。


0
投票

您可以创建与选项一样多的隐藏输入,每个选项都有一个选项值的名称。输入的值是选项的内容。在第二个脚本中,您可以查找下拉列表值,然后使用该名称获取隐藏输入的值。


0
投票

我们可以使用data属性传递它,并且可以在js中访问,

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

var name = $(this).find(':selected').data('name');
© www.soinside.com 2019 - 2024. All rights reserved.