HTML:单选按钮数组

Posted

技术标签:

【中文标题】HTML:单选按钮数组【英文标题】:HTML: Radio Button Array 【发布时间】:2012-03-06 03:56:54 【问题描述】:

好吧,我在处理单选按钮数组时遇到了与其他线程不同的问题。

我想要它,以便根据选择的答案,将值保存在不同的数组中,但我不希望用户能够从同一个问题中选择多个选项。

例子:

Question 1
<input type="radio" name="Array1[]" value="question1"/>
<input type="radio" name="Array2[]" value="question1"/>
<input type="radio" name="Array3[]" value="question1"/>
<input type="radio" name="Array4[]" value="question1"/>

Question 2
<input type="radio" name="Array1[]" value="question2"/>
<input type="radio" name="Array2[]" value="question2"/>
<input type="radio" name="Array3[]" value="question2"/>
<input type="radio" name="Array4[]" value="question2"/>

这样做的目的是让我可以将问题本身安排在 4 个类别中的一个中,并用分配给它们的问题填充每个数组。

例子:

假设有 4 个问题,答案是 1、3、1、2,我想要的结果数组是:

Array1[0] = "question1"
Array1[1] = "question3"

Array2[0] = "question4"

Array3[0] = "question3"

Array4[] = Empty array

这可以做到还是我需要不同的方法来获得所需的输出?顺便说一下,我打算用php来处理这个表单。

编辑:更多细节。一个示例用法。

<h1>What are your preferences?</h1>
<form type=...etc.>
    <label>Cats</label>
    <input type="radio" name="Love[]" value="Cats"/>
    <input type="radio" name="Like[]" value="Cats"/>
    <input type="radio" name="Dislike[]" value="Cats"/>
    <input type="radio" name="Hate[]" value="Cats"/>
    <label>Dogs</label>
    <input type="radio" name="Love[]" value="Dogs"/>
    <input type="radio" name="Like[]" value="Dogs"/>
    <input type="radio" name="Dislike[]" value="Dogs"/>
    <input type="radio" name="Hate[]" value="Dogs"/>
    <label>Ferrets</label>
    <input type="radio" name="Love[]" value="Ferrets"/>
    <input type="radio" name="Like[]" value="Ferrets"/>
    <input type="radio" name="Dislike[]" value="Ferrets"/>
    <input type="radio" name="Hate[]" value="Ferrets"/>
    <label>Turtles</label>
    <input type="radio" name="Love[]" value="Turtles"/>
    <input type="radio" name="Like[]" value="Turtle"/>
    <input type="radio" name="Dislike[]" value="Turtles"/>
    <input type="radio" name="Hate[]" value="Turtles"/>
<form>

【问题讨论】:

这背后的逻辑是什么?目的是什么?您只能选择一台收音机,这就是收音机的问题。为什么要使用数组?一个简单的&lt;?php $radioValue = $_POST['radioName'] ?&gt; 就可以了。 这不是问题的答案,而是某种排列脚本,用户应该在其中将问题排列在 4 个类别之一中。把它想象成问题是对象,可以放在 4 个盒子之一中;所以所需的输出是每个盒子包含的内容。 你能举一个可能的问题和答案的例子吗?我还是不明白。你不能只使用复选框吗? 编辑了帖子并提供了更多详细信息。 这没有意义! 【参考方案1】:

您只能为每个名称选择一个单选按钮,因此如果您有不同的名称(如您所做的那样),用户将能够为每个问题选择多个单选按钮。我很抱歉地说,但你的提议是行不通的。相反,您将不得不维护一个为相应问题回答的数字的手动列表。看来您提前知道了所有答案,所以这应该没什么大不了的。

【讨论】:

我知道我必须使用相同的名称才能使选项互斥。我的问题是如何达到预期的结果,即使我必须采取不同的方法。【参考方案2】:

我认为您可以猜到该名称对复选框进行了分组,因此如果没有 javascript,您想要这样做的方式是不合理的。我建议您为每个问题命名复选框,然后您可以使用 php.ini 按值对它们进行分组。 例如,如果您得到答案 1、3、1、2,您可以将 push 它们放入相应的数组中。 会是这样的。但这不是饼干的证据

        <form method="post">
            <input type="radio" name="v1" id="v1-1" value="1"/><label for="v1-1">1-1</label><br/>
            <input type="radio" name="v1" id="v1-2" value="2"/><label for="v1-2">1-2</label><br/>
            <input type="radio" name="v1" id="v1-3" value="3"/><label for="v1-3">1-3</label><br/>

            <input type="radio" name="v2" id="v2-1" value="1"/><label for="v2-1">2-1</label><br/>
            <input type="radio" name="v2" id="v2-2" value="2"/><label for="v2-2">2-2</label><br/>
            <input type="radio" name="v2" id="v2-3" value="3"/><label for="v2-3">2-3</label><br/>

            <input type="radio" name="v3" id="v3-1" value="1"/><label for="v3-1">3-1</label><br/>
            <input type="radio" name="v3" id="v3-2" value="2"/><label for="v3-2">3-2</label><br/>
            <input type="radio" name="v3" id="v3-3" value="3"/><label for="v3-3">3-3</label><br/>

            <input type="radio" name="v4" id="v4-1" value="1"/><label for="v4-1">4-1</label><br/>
            <input type="radio" name="v4" id="v4-2" value="2"/><label for="v4-2">4-2</label><br/>
            <input type="radio" name="v4" id="v4-3" value="3"/><label for="v4-3">5-3</label><br/>
            <input type="submit" value="vote"/>
        </form>
<?php
if(! empty($_POST))

    $plausible_answers = array(1,2,3,4);
    $answers = array();
    for($i=1;! empty($_POST["v$i"]);++$i)
    
        if(in_array($_POST["v$i"], $plausible_answers))
        
            $answers[$_POST["v$i"]][] = $i;
        
    
    print_r($answers);

?>

【讨论】:

是的,我也这么想,但我想要一个更简单的解决方案(奥卡姆)。由于似乎没有办法解决它,我只需要按照你说的做。谢谢。【参考方案3】:

我认为你需要从另一个方向着手,像这样

<label>Cats</label>
<input type="radio" name="Cats" value="Love"/> Love
<input type="radio" name="Cats" value="Like"/> Like
<input type="radio" name="Cats" value="Dislike"/> Dislike 
<input type="radio" name="Cats" value="Hate"/> Hate

在服务器端,类似:

$loves=array();
$likes=array();
$dislikes=array();
$hates=array();

然后遍历 $_POST,检查值,如果它与您期望的四个中的任何一个匹配,则将名称推送到适当的数组中。

【讨论】:

【参考方案4】:

您可以创建像 array[] 这样的数组,但是在单选按钮中,我们必须为像 array[1],array[2] ... 动态地赋予索引。 id 我们给radioArray[] 之类的名称,就像其他输入类型="fname[]" 但它不会自动增加我们必须用额外变量增加索引的索引。

  e.g name= "$radiArray[1] = 'val1'"; //give index like 1,2,3 ...
      name ="$radiArray[2] = 'val2'"; ....

【讨论】:

以上是关于HTML:单选按钮数组的主要内容,如果未能解决你的问题,请参考以下文章

html中<radio>单选按钮控件标签用法解析及如何设置默认选中

绑定敲除数组以呈现 jqm 单选按钮

如何为“其他 - 请指定”制作单选按钮?

尝试从单选按钮显示的 JSON 数组中调出多个对象

WPF dataGrid 单选按钮

根据单选按钮值调用标记