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


How to post two values in an option field?

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

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

建议吗?

不能发布两个值,除非它们都出现在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";

您可以添加一个名为"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_splitexplode将两者分开,一旦表单数据被处理。

要做到这一点,唯一的方法是在单个选项的值中包含这两部分信息。只需使用如下代码,然后当您获得返回的值时,在第一个下划线处拆分字符串以分隔出值。

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

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

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

<option value="<?php echo $name['id']);?>" data-name="<?php echo $name['name']);?>">One</OPTION>
var name = $(this).find(':selected').data('name');