单击文本以选择相应的单选按钮


86

我正在使用PHP创建测验Web应用程序。每个问题由一个单独的部分组成<label>,有4个可能的选择,radio buttons用于允许用户选择他/她的答案。单个问题的当前HTML如下所示:

<label for="349">What is my middle name?</label>
<br>
<input id="349" type="radio" value="1" name="349">Abe
<br>
<input id="349" type="radio" value="2" name="349">Andrew
<br>
<input id="349" type="radio" value="3" name="349">Andre
<br>
<input id="349" type="radio" value="4" name="349">Anderson
<br>

我希望用户可以选择单击与单选按钮关联的文本。 现在,用户只能单击单选按钮本身-我发现这是一项非常繁琐的任务。

我读到“无法选择特定的单选按钮选项”,方法是单击选择文本,并且建议指向标记的forid属性匹配。我已经做到了,但仍然行不通。

我的问题是:我希望能够单击<input type="radio">对象的文本,而不是只能选择单选按钮本身。 我知道我之前已经阅读过有关此问题的信息,但似乎找不到解决我问题的方法。任何帮助或建议,不胜感激!

Answers:


176

在您的代码中,您在表单本身上有一个标签。您希望在每个单独的无线电组上放置标签,如下所示。

<form>
  <p>What is my middle name?</p>
  <br>
  <input id="349" type="radio" value="1" name="question1">
  <label for="349">Abe</label>
  <br>
  <input id="350" type="radio" value="2" name="question1">
  <label for="350">Andrew</label>
  <br>
  <input id="351" type="radio" value="3" name="question1">
  <label for="351">Andre</label>
  <br>
  <input id="352" type="radio" value="4" name="question1">
  <label for="352">Anderson</label>
  <br>
</form>

您应该记住,两个元素永远不应具有相同的ID。使用该name属性是为了使单选按钮作为一个组起作用,并且一次只允许一个选择。


7
非常简单。重新发现标签几乎隐藏的功能时,一定会喜欢它
foochow 2014年

37

如果根据Nathan的回答,单选按钮和标签之间似乎会有一点不可点击的空间。这是使他们无缝连接的方法(请参阅本文):

<form>
    <p>What is my middle name?</p>
    <br>
    <label><input id="349" type="radio" value="1" name="question1">Abe</label>
    <br>
    <label><input id="350" type="radio" value="2" name="question1">Andrew</label>
    <br>
    <label><input id="351" type="radio" value="3" name="question1">Andre</label>
    <br>
    <label><input id="352" type="radio" value="4" name="question1">Anderson</label>
    <br>
</form>

2
我更喜欢这个答案。但是您确定使用这种方法甚至需要“ for”属性吗?
Piddu

@Piddu:我认为你是对的,所以我更新了我的答案。谢谢!
user21820

避免单选按钮和标签之间有多余空间的另一种选择是,不要将其放在该位置<input id="349" type="radio" value="1" name="question1"><label for="349"> Abe</label>(标签之间没有空格或换行符)
Arye Eidelman

1
我刚刚在chrome和firefox中测试了自己的方式,发现通过删除空格字符,它将不可点击的空格从7像素减少到3像素。看看为什么这些内联块div元素之间存在无法解释的差距。剩下的三个像素是单选按钮的默认右边界margin: 3px 3px 0 5px;(在firefox中更明显,因为默认情况下具有悬停效果),可以通过移除边界并用padding来固定CSS。
Arye Eidelman

1
@AryeDovEidelman:我知道了,谢谢你的调查!尽管为简单起见,我将坚持将整个内容包装在标签中。=)
user21820

1

标签应位于每个答案的周围,例如安倍,安德鲁等周围,并且每个标签都必须唯一。


1

将输入标签嵌套在标签标签内可确保标签显示在单选按钮旁边。建议使用较早的方法,您可以将标签标签放在html文件中的任何位置,单击后它将选择关联的单选按钮。看一下这个:

<html>
<body>

<form>
  <p>What is my middle name?</p>
  <br>
  <input id="349" type="radio" value="1" name="question1">

  <br>
  <input id="350" type="radio" value="2" name="question1">
  <label for="350">Andrew</label>
  <br>
  <input id="351" type="radio" value="3" name="question1">

  <br>
  <input id="352" type="radio" value="4" name="question1">
  <label for="352">Anderson</label>
  <br>
</form><br/>
<p>This is a paragraph</p>
  <label for="349">Abe</label><br/>
  <label for="351">Andre</label>
  
</body>
</html>

这样做可以消除此缺陷:

<form>
  <p>What is my middle name?</p>
  <br>
  
  <label>
    <input id="349" type="radio" value="1" name="question1"/>Abe
  </label>
  <br>
  
  <label>
    <input id="350" type="radio" value="2" name="question1"/>Andrew
  </label>
  <br>
  
  <label>
    <input id="351" type="radio" value="3" name="question1"/>Andre
  </label>
  <br>
  
  <label>
    <input id="352" type="radio" value="4" name="question1"/>Anderson
  </label>
  <br>
</form>


0

你可以这样

 <label for="1">hi</label>
 <input type="radio" id="1" />

因此,如果单击文本或标签,它将选择单选按钮。但是如果你这样做

<label for="1">//</label>

然后将其添加到我之前编写的代码中,然后单击第二个标签,它也会选择收音机。


0

我已经做了多年了,但是这些对我来说都没有使用变量。

    echo "<input type='radio' name='student' id='$studentID' value='$studentID'>
        <label for='$studentID'>$fname</label> $lname<br />\n";
    echo "<input type='radio' name='student' id='$studentID' value='$studentID'>
        <label for='$studentID'>$fname $lname</label><br />\n";

这是来源:

        <input type='radio' name='student' id='986875' value='986875'>
        <label for='986875'>John</label> Brown<br />
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.