【问题标题】:How to make a radio button choice limit the range of a number input box如何使单选按钮选择限制数字输入框的范围
【发布时间】:2021-12-28 06:08:34
【问题描述】:

我确定这在某处得到了回答,但我找不到。我有一个单选按钮和一个如下所示的数字字段。我想让它在第一个单选按钮被选中时,数字框的最大值为 1,而当另一个单选按钮被选中时,最大值限制被删除。

所以当第一个收音机被选中时是这样的

<form action="test.html" method="POST">
      <input id="mySelect" type="radio" name="isunique" value="0"> Unique
      <input id="mySelect" type="radio" name="isunique" value="1"> Not Unique
      <input type="number" min="0" max="1" step="1" name="qty">
</form>

当第二个收音机被选中时就像这样

<form action="test.html" method="POST">
      <input id="mySelect" type="radio" name="isunique" value="0"> Unique
      <input id="mySelect" type="radio" name="isunique" value="1"> Not Unique
      <input type="number" min="0" step="1" name="qty">
</form>

我尝试使用函数调用来做到这一点

onchange="unlimitqty()"

函数在哪里

function unlimitqty() {
  var x = document.getElementById("mySelect").value;
    document.getElementById("qlimit").innerHTML = "<input type=\"number\" min="0\" step=\"1\" name=\"qty\">\n";
}

还有另一个函数limitqty()

function limitqty() {
  var x = document.getElementById("mySelect").value;
    document.getElementById("qlimit").innerHTML = "<input type=\"number\" min=\"0\" max=\"1\" step=\"1\" name=\"qty\">\n";
}

然后我把这个放在表格里

<p id="qlimit">

这会在页面上产生正确的行为,但在提交表单时不会传递变量。

我并不是真的要修复这种方法,我觉得一定有更好的方法。必须有一些 JavaScript 内置函数来限制数字字段。就是没找到。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript forms


    【解决方案1】:

    您可以通过设置其属性来限制数字输入的最大值。 setAttribute 函数的第一个参数采用您要更改的值,例如:“max”、“min”等。第二个参数采用您要设置为第一个参数的值。在您的情况下,您可以通过执行以下操作将最大值更改为 1:

    document.getElementById('numberboxID').setAttribute('max', 1);
    

    要使值无限大,您可以将参数 2 更改为 Infinity:

    document.getElementById('numberboxID').setAttribute('max', Infinity);  
    

    编辑: 您可以使用以下方法将值设置为 1:

    document.getElementById('numberboxID').value = 1;
    

    你也可以在不使用 setAttribute 的情况下更改最大值:

    document.getElementById('numberboxID').max = 1;
    

    【讨论】:

    • 非常感谢,我现在正在处理这个问题,我可能还有更多问题,因为我对 javascript 基本上一无所知。我在 PHP 方面受过良好的教育,但我真的需要尽快学习 javascript。
    • 天哪,它有效!如此简单。不过有一个细节。当我单击将其限制为最大值 1 的单选时,如果已将其设置为更高,如何使其将框的值重置为 1?
    • 我尝试添加这个:``` document.getElementById('qtybox').setAttribute('value', 1); ```但没有运气
    • 我已经更新了我的答案。它现在应该可以工作了:D
    • 天哪,它工作得很好,非常感谢!它最终有一个如此简单的解决方案。在发帖寻求帮助之前,我做了很多谷歌搜索,看起来应该更容易找到。我希望我能再次投票给你,但无论如何你让我很开心。 :-)
    【解决方案2】:

    这是一种方法:

    const inp=document.querySelector("input[type=number");
    document.getElementById("max1").onchange=ev=>{
      inp.max=ev.target.checked?(inp.value=Math.min(inp.value,1),"1"):undefined;
    
    }
    <form action="test.html" method="POST">
      <label><input type="checkbox" id="max1"> max 1</label>
      <input type="number" min="0" step="1" name="qty" style="width:50px">
    </form>

    我冒昧地用一个复选框替换了您的两个单选按钮。这避免了初始的未定义阶段(没有选择单选按钮)并且在任何情况下都更易于操作。

    【讨论】:

    • 谢谢!我现在正在处理这个问题,如果我成功了,我会让你们知道什么是有效的。您花费的时间非常多!
    • 这也很好用。但它有同样的问题,该值不会重置为 1。如果您尝试以 > 1 的值提交表单,表单会报错,所以这不是世界末日。但是,如果在单击时将值重置为 1,如果它已经设置得更高,那么它仍然会更好。再次感谢您的优雅代码!
    • 这很容易解决 :D - 查看我更改的 sn-p。
    猜你喜欢
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多