【问题标题】:How is a radio button unchecked, if there's only one button?如果只有一个按钮,如何取消选中单选按钮?
【发布时间】:2015-12-17 09:42:21
【问题描述】:

我在输入表单中有这两个单选按钮:

<input type="radio" name="info_only_on" value="yes"> Info-only  
<input type="radio" name="info_only_on" value="off"> (Clear Button)

它创建了两个按钮,因此用户可以检查 info-only,然后在出错时关闭 info-only。我创建了第二个按钮,因为一旦选中了单选按钮,再次单击它就不会取消选择它。

我已切换到 type="checkbox",它确实让用户取消选择。

<input type="checkbox" name="info_only_on" value="yes">

查看单选类型按钮的规格,我没有看到用户取消选中它的任何内容。我错过了什么?

我正在使用 html、php 并避免使用 javascript。


用来勾选框值的php是:

 // When info_only_on is set to clear, it's value should be passed here as "no" 
if($_POST["info_only_on"] == "yes")                                     
{ $info_only =  "Added Member info online but not paying online. ";   }
else 
{ $info_only = " ";  }   

  // BUILD UP MESSAGE to email to our membership chair  
$MsgToWrite = "\r\n" . $BasicInfo . $PhoneInfo . $EmailInfo;
If ($info_only <> " ") 
{   $MsgToWrite = $MsgToWrite . "\r\n" . $info_only; }

【问题讨论】:

  • 为什么要避免使用 javascript?这是非常适合 javascript 的东西,但是可以通过使用纯 css 和切换不透明度来实现...发布完整的源代码以便我查看。
  • 那么使用复选框有什么问题?
  • @divy - 这里的复选框很好,但我想在我想使用单选框时解决这个谜。即使有几个单选框,我也想选择一个都不选。
  • @curls 好的,但仅使用 CSS 是不可能的,你肯定需要 JavaScript/JQuery。另外我想说,如果你使用 JavaScript 相处,那么避免单选按钮发生这种情况,找到其他选择。我可以帮你解决这个问题(JavaScript 解决方案)。
  • @Jordan - 考虑到我的用户有几个关闭了 javascript,我想避免它。这是完整的源代码。唯一的另一行是带有动作(等)和各种 html 文本到屏幕和输入文本元素的输入表单。它的旧代码经过了一些改造,所以它是用表格布局的,并且没有与之关联的 .css id。 (我在其他地方使用 .css,因此可以轻松添加 .css 元素,如果有帮助的话。)什么是不透明度功能?

标签: html checkbox radio-button


【解决方案1】:

我不认为没有javascript你可以做到,这里有一个简单的例子:

HTML 代码:

<input type="radio" name="name" id="radioBtn" onclick="test(this)" /> Radio

Javascript 代码:

    var radioState = false;
    function test(element){
        if(radioState == false) {
            check();
            radioState = true;
        }else{
            uncheck();
            radioState = false;
        }
    }
    function check() {
        document.getElementById("radioBtn").checked = true;
    }
    function uncheck() {
        document.getElementById("radioBtn").checked = false;
    }

看这里:https://jsfiddle.net/eloufirhatim/ypwhugxz/

【讨论】:

  • 谢谢!我看着它有点失落。但是我必须去做一些事情,所以我今晚要回来再盯着看。我没有看到元素设置在哪里传递给功能测试。也不为什么 check() 不是 if 语句中的测试子句。我完全迷路了——有空的时候需要看看。
  • 当您单击单选按钮(onclick 属性)时,启动 TEST 函数,该函数测试名为“radioState”的变量(初始化为 false):radioState = true -> 选中单选按钮false 表示未选中单选按钮,因此如果测试的变量为 false,则启动函数 CHECK 以检查单选按钮,否则启动函数 UNCHECK 以取消选中单选按钮
  • 啊,现在更有意义了。我仍然不明白 test(this) 如何获得 'this',或者 test(element) 中的元素是否可以是任何名称或需要是元素,以便 getElementById 获得 onclick 值。这个过程也可以像我上面编辑的那样完成吗?
  • 参数“this”是将输入的radio作为参数传递给函数,所以你可以在函数中使用它,但是这里是可选的,因为我没有在函数中使用它所以你可以使用如下函数:test()
  • 所以 element 是一个选择,与 document.getElementById("radioBtn").checked 短语中的 element 无关?
【解决方案2】:

很遗憾,无法使用 HTML 取消选择单个单选按钮。在 HTML 中,只需选择一个单选按钮。如果您希望能够在选择一个单选按钮后取消选择所有单选按钮,那么您将不得不为此使用 javascript。

来自 Wikipedia:“最初可能没有选择组中的任何单选按钮。这种未选择状态无法通过与单选按钮小部件交互来恢复,尽管可能通过其他用户界面元素来恢复。” https://en.wikipedia.org/wiki/Radio_button

【讨论】:

  • @BC - 这是一个愚蠢的设计。但它确实解释了为什么我无法找到一种完全相反的方法(并取消选择它。)复选框可以是奇怪的,但单选按钮不能。解释器(浏览器)代码应该能够标准化,以便两者都可以工作。感谢您的信息!
  • @BC - 我发帖时写下了你的名字和@,然后它就消失了。然后在-BC 发布并保留了下来。我以前见过这种情况。这是我没有做的简单事情,还是我需要在 meta 中询问才能解决这个问题?
猜你喜欢
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2011-02-05
相关资源
最近更新 更多