从多选中发布值


70

如何在表单中发布多个选择的值?当我点击提交时,所有选定的值都不会发布。

<form id="form" action="" method="post">
    <div>
        <select id="inscompSelected" multiple="multiple" class="lstSelected">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>                
        </select>
        <input type="submit" value="submit">
    </div>
</form>

您正在使用哪种服务器端语言?
iambriansreed 2012年

Answers:


132

您需要添加一个name属性。

由于这是多项选择,因此在HTTP级别上,客户端仅发送多个具有相同名称的名称/值对,如果您使用带有的表单,则可以自己观察method="GET": someurl?something=1&something=2&something=3

对于PHP,Ruby和其他一些库/框架,您需要[]在名称末尾添加方括号()。框架将解析该字符串并以某种易于使用的格式(例如数组)呈现它。

除了手动解析请求之外,没有语言/框架/与库无关的方法来访问多个值,因为它们都具有不同的API

对于PHP,您可以使用:

<select name="something[]" id="inscompSelected" multiple="multiple" class="lstSelected">

11
由于它是多选的,因此您希望名称以[](以数组形式发布)结尾。
火箭Hazmat 2012年

2
我还要补充一点,如果您使用的是PHP之类的东西,则可以始终将其转储出去,$_POST以查看提交后保留了什么变量。
Biotox 2012年

62
[]在名称的末尾添加一个PHP惯用语,HTML不需要,并且其他语言/框架也不使用。
谢尔盖(Sergey)2013年

2
同意@Sergey。因此,仍然存在一个问题。“在服务器端访问多个所选值的语言不可知方式是什么?”
Ejaz 2013年

9
@Ejay:在HTTP级别,客户端仅发送多个具有相同名称的名称/值对,如果您使用带有method="GET":的表单,则可以自己观察someurl?something=1&something=2&something=3。您正在使用的库/框架只是解析该字符串并以某种易于使用的格式显示它。除了手动解析请求外,没有语言/框架/与库无关的方法来访问多个值,因为它们都具有不同的API。
谢尔盖(Sergey)2013年

0

试试这个:这里选择是您的选择元素

let select = document.getElementsByClassName('lstSelected')[0],
    options = select.options,
    len = options.length,
    data='',
    i=0;
while (i<len){
    if (options[i].selected)
        data+= "&" + select.name + '=' + options[i].value;
    i++;
}
return data;

数据采用查询字符串的形式,即name = value&name = anotherValue

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.