【问题标题】:Requiring radio button selection in Javascript需要在 Javascript 中选择单选按钮
【发布时间】:2019-09-29 10:10:25
【问题描述】:

我是 JS 的初学者,试图创建一个带有两个选项(左/右)的单选按钮,其中需要选择两个选项之一才能让程序继续,否则它将显示错误画面。

我的代码要么阻止参与者继续按什么(即无论如何都会弹出错误),要么允许参与者无论如何继续(即程序继续,即使他们不要选择其中一个选项。)我觉得这可能与我的逻辑运算符有关,但我真的不确定。我试过使用手动异或,这似乎不是问题。

我正在使用修改后的代码,所以如果还有什么我可以/应该包括的内容,请告诉我!

<div class="radio"><label><input id="option1"  name="option1" type="radio" value="Right"  />Right</label></div>
<div class="radio"><label><input id="option1" name="option1" type="radio" value = "Left" />Left</label></div>

无论如何都会导致错误的代码:

<input onclick="function filledOut(id) { return (document.getElementById(id).value == 'Left')} if(filledOut('option1') ) { next(); }else{ alert('Please provide a response.'); }" type="button" value="Continue" /> </div>
</div>

导致程序继续运行的代码:

<input onclick="function filledOut(id) { return ((document.getElementById(id).value == 'Left')|| (document.getElementById(id).value == 'Right'))} if(filledOut('option1') ) { next(); } else{ alert('Please provide a response.'); }" type="button" value="Continue" /> </div>
</div>

【问题讨论】:

  • 为了将来参考,像这样的问题在代码审查中可能会更好:codereview.stackexchange.com
  • 注意:&lt;input&gt; 标签不使用也不需要结束斜线,并且在 HTML 中从来没有。
  • 谢谢大家的帮助。这是我的第一个 JS 项目(被扔在了深处),但我会继续努力的!

标签: javascript radio-button logical-operators


【解决方案1】:
<form name="formName">
    <input type="radio" name="option1" id="option1" value="Right"/>Right
    <input type="radio" name="option2" id="option2" value="Left"/>Left
</form>


<input onclick="checkResponse()" type="button" value="Continue" />

checkResponse 函数会检查用户点击继续按钮时是否选择了任何选项。

<script type="text/javascript">
    function checkResponse(){
        if (isChecked('option1') || isChecked('option2')){
            next();
        }else{
            alert("Your error message")
        }
    }

    function isChecked(id){

     return document.getElementById(id).checked; //returns true if any options are selected

    }

</script>

【讨论】:

  • 很高兴知道!干杯! @JR-M
  • 单选按钮并不总是选择默认值,除非程序员告诉它。
  • 再读一遍后,你通过重新创建带有复选框的单选按钮的确切结果重新发明了轮子。这不是好的用户体验,因为用户不会理解这个功能。使用单选按钮和复选框来完成它们的设计目的,而不是给用户造成混淆。
  • 我收到错误信息,单选按钮会在页面加载时选择默认值。感谢您的建议,非常感谢。
【解决方案2】:

您需要将 ID 更改为不同的 ID。对于单选按钮,“名称”是单选按钮组。除非您单独查看每个项目,否则您不需要 ID,如果您为他们提供 ID,它们需要与其他所有 ID 以及“名称”属性区分开来。

https://www.w3schools.com/tags/att_input_type_radio.asp

<input id="optionRight" name="groupName" type="radio" value="Right" /> <input id="optionLeft" name="groupName" type="radio" value="Left" />

此外,您可以将其中一个单选按钮设置为默认选中状态。

How to select a radio button by default?

&lt;input id="option1" name="groupName" type="radio" value="Right" checked="checked" /&gt;

【讨论】:

  • 感谢您的评论!更改此设置后,我是否需要更改我的代码以使用 getElementsByName(groupName)?既不将代码保留为 getElementsByID(inputID) 似乎也无法解决此问题。可悲的是,由于这是一个心理学实验,我不能让它从默认按钮开始。
  • 有许多不同的方法可以获取您想要的东西,所以我会给您留下另一个链接,让您找出您真正需要的链接。 stackoverflow.com/questions/9561625/…
【解决方案3】:

我的理解是,如果没有检查任何内容,则需要显示错误,如果检查其中之一,则需要继续。

为此,您需要检查其中任何一个是否被选中而不是检查其值,并为每个单选按钮指定一个唯一的 ID。 你可以做类似的事情

function isChecked(id){//Instead of filledOut
  return document.getElementById(id).checked;
 //.checked returns true or false
}
if (isChecked('option1') || isChecked('option2')){
 next();
}else{
 alert("Your error message")
}

如果需要,另一个获取值的函数:

function getCheckedBtnValue(){
  if(isChecked('option1')) return document.getElementById('option1').value
  if(isChecked('option2')) return document.getElementById('option2').value
  return null
}
//You can also use this function to check if any of them is checked
const value = getCheckedBtnValue();
if(value){
 next();
}else{
 alert("Your error message");
}

另外,尽量不要在 HTML 元素中编写 JavaScript,因为它可能很难经常阅读。 继续 JavaScript。

【讨论】:

  • 不幸的是,OP 还没有走到这一步。正如我的回答中提到的,他的两个单选按钮具有相同的 ID,这也与 Name 属性相同,因此他必须先修复该问题,然后才能使用您的建议。不幸的是,这意味着您的答案没有解决问题。
  • 是的,我实际上已经在前几行提到了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2017-11-21
  • 2015-02-27
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多