我在HTML表单中有一些带有选项的选择标记:
(将使用PHP收集和处理数据)
测试:
<SELECT NAME="Testing">
<OPTION VALUE="1"> One
<OPTION VALUE="2"> Two
<OPTION VALUE="3"> Three
</SELECT>
选项是否可以携带多个值,例如用户选择时 “一个”,然后与该选项相关的一些其他值将写入数据库。
我应该如何设计SELECT
标记,以便每个选项都可以包含一个以上的值:
<SELECT NAME="Testing">
<OPTION VALUE="1" value="2010"> One
<OPTION VALUE="2" value="2122"> Two
<OPTION VALUE="3" value="0"> Three
</SELECT>
答案 0 :(得分:123)
一种方法,首先是一个数组,第二个是一个对象:
<select name="">
<option value="{'num_sequence':[0,1,2,3]}">Option one</option>
<option value="{'foo':'bar','one':'two'}">Option two</option>
</select>
编辑(回答3年后)将两个值都放入JSON格式(使用JSON.stringify()
),因为我抱怨我的概念验证答案“可能会让新手开发者感到困惑。”
答案 1 :(得分:46)
我今天真的想知道这个,我通过使用php explode函数来实现它,就像这样:
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选择框,其中包含2个选项。每个选项都有1个值,它有一个分隔符(在本例中为“|”)来分割值(在本例中为模型和颜色)。
在操作页面上,我将结果爆炸成一个数组,然后调用每个数组。正如您所看到的,我已将它们分开并贴上标签,以便您可以看到它造成的影响。
我希望这有助于某人:)
答案 2 :(得分:16)
可以在选择选项中包含多个值,如下所示。
<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
中找到更多详细信息答案 3 :(得分:15)
一个选项是将逗号分隔的多值放入
喜欢
value ="123,1234"
并在服务器端将它们分开
答案 4 :(得分:11)
当我需要这样做时,我将其他值设为数据值,然后使用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>
答案 5 :(得分:5)
如果您的目标是将此信息写入数据库,那么为什么需要在value
属性中包含主值和“相关”值?为什么不将主值发送到数据库,让数据库的关系性质来处理其余部分。
如果您需要在OPTION
中设置多个值,请尝试使用不常见的分隔符:
<OPTION VALUE="1|2010">One</OPTION>
...
或添加对象文字(JSON格式):
<OPTION VALUE="{'primary':'1','secondary':'2010'}">One</OPTION>
...
这实际上取决于你想要做什么。
答案 6 :(得分: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的情况下,在服务器端,使用像explode这样的函数
[array] = explode([delimeter],[发布值]);
$values = explode(':',$_POST['val']
上面的代码返回一个数组只有数字而':'被删除
答案 7 :(得分:3)
最简单的方法:
<select name="demo_select">
<option value='{"key1":"111","key2":"222"}'>option1</option>
<option value='{"key1":"333","key2":"444"}'>option2</option>
</select>
在控制器上解码请求值,如下所示:
$values = json_decode($request->post('demo_select'));
$val1 = $values->key1;
$val2 = $values->key2;
echo "Value 1: ".$val1;
echo "Value 2: ".$val2;
第一个选项的输出:
Value 1: 111
Value 2: 222
第二个选项的输出:
Value 1: 333
Value 2: 444
答案 8 :(得分:2)
我是通过使用数据属性完成的。比试图爆炸等的其他方法更清洁。
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);
});
答案 9 :(得分:1)
使用分隔符分隔值。
<select name="myValues">
<option value="one|two">
</select>
<?php>
$value = filter_input(INPUT_POST, 'myValues');
$exploded_value = explode('|', $value);
$value_one = $exploded_value[0];
$value_two = $exploded_value[1];
?>
答案 10 :(得分:0)
HTML中不允许使用重复的标记参数。你可以做的是VALUE="1,2010"
。但是您必须解析服务器上的值。
答案 11 :(得分: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>';
答案 12 :(得分:0)
在HTML中
<SELECT NAME="Testing" id="Testing">
<OPTION VALUE="1,2010"> One
<OPTION VALUE="2,2122"> Two
<OPTION VALUE="3,0"> Three
</SELECT>
对于JS
var valueOne= $('#Testing').val().split(',')[0];
var valueTwo =$('#Testing').val().split(',')[1];
console.log(valueOne); //output 1
console.log(valueTwo); //output 2010
OR FOR PHP
$selectedValue= explode(',', $value);
$valueOne= $exploded_value[0]; //output 1
$valueTwo= $exploded_value[1]; //output 2010
答案 13 :(得分:0)
那html数据属性呢? 那是最简单的方法。 来自w3school
的引用以您的情况
$('select').on('change', function() {
alert('value a is:' + $("select option:selected").data('valuea') +
'\nvalue b is:' + $("select option:selected").data('valueb')
)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<select name="Testing">
<option value="1" data-valuea="2010" data-valueb="2011"> One
<option value="2" data-valuea="2122" data-valueb="2123"> Two
<option value="3" data-valuea="0" data-valueb="1"> Three
</select>
答案 14 :(得分:0)
这对其他人可能有用,也可能没有用,但是对于我的特定用例,我只是希望在选择选项时从表单中传回其他参数-这些参数对于所有选项都具有相同的值,所以。我的解决方案是将带有选择的隐藏输入包括在表单中,例如:
<FORM action="" method="POST">
<INPUT TYPE="hidden" NAME="OTHERP1" VALUE="P1VALUE">
<INPUT TYPE="hidden" NAME="OTHERP2" VALUE="P2VALUE">
<SELECT NAME="Testing">
<OPTION VALUE="1"> One </OPTION>
<OPTION VALUE="2"> Two </OPTION>
<OPTION VALUE="3"> Three </OPTION>
</SELECT>
</FORM>
也许很明显……看到后更加明显。
答案 15 :(得分:-4)
您可以使用多个属性
<SELECT NAME="Testing" multiple>
<OPTION VALUE="1"> One
<OPTION VALUE="2"> Two
<OPTION VALUE="3"> Three