Javascript 如果数字输入验证返回错误(!value>0),则返回js

Javascript 如果数字输入验证返回错误(!value>0),则返回js,javascript,Javascript,在本例中: <form name="someform" action="somepage.php" method="post"> <input name="length" id="length" type="number" min="1" oninput="validate()"/> <input type="submit" id="submit" value="submit" /> </form> 如果在框中输入0,并且我不理解

在本例中:

<form name="someform" action="somepage.php" method="post">
    <input name="length" id="length" type="number" min="1" oninput="validate()"/>
    <input type="submit" id="submit" value="submit" />
</form>
如果在框中输入0,并且我不理解为什么,则此函数将返回valid=true。如果您在框中有一个数字,并将其删除,使框为空,则返回false,但此处0始终为true

编辑:您可以输入负数,如-5,这也会返回true

我这里有一个jsbin示例:

如果您能帮我正确操作,我们将不胜感激

你不应该写!长度>0。而是使用长度!=0或长度你不应该写!长度>0。而是使用长度!=0或长度如果直接将测试存储在布尔有效值中,则无需输入任何值。像这样:

function validate() {
   var length = document.getElementById("length").value; // get the value
   var valid = length > 0;                               // if length is > 0 then valid will be true, otherwise it will be false
   document.getElementById("submit").disabled = !valid;  // disable if only valid is false
}
如果直接将测试存储在布尔有效值中,则不需要任何设置。像这样:

function validate() {
   var length = document.getElementById("length").value; // get the value
   var valid = length > 0;                               // if length is > 0 then valid will be true, otherwise it will be false
   document.getElementById("submit").disabled = !valid;  // disable if only valid is false
}
为什么不:

 document.getElementById("length").oninput=function (){
   this.value=Math.max(this.value,1);
 }
或:

更易于用户理解,而不是禁用…

为什么不:

 document.getElementById("length").oninput=function (){
   this.value=Math.max(this.value,1);
 }
或:

用户更容易理解,而不是禁用…

验证在每个按键上激发,因此最好初始化LengthinInput和submitButton对象一次,并在函数中使用它们以获得更好的性能

var lengthInput=document.getElementByIdlength, submitButton=document.getElementByIdsubmit; 功能验证{ submitButton.disabled=!LengthinInput.value>0; } //初步验证 验证 validate在每个按键上激发,因此最好初始化LengthinInput和submitButton对象一次,并在函数中使用它们以获得更好的性能

var lengthInput=document.getElementByIdlength, submitButton=document.getElementByIdsubmit; 功能验证{ submitButton.disabled=!LengthinInput.value>0; } //初步验证 验证
现代浏览器不需要JavaScript来禁用输入

输入:无效{ /*背景色:ffdddd*/ } 表单:无效[类型=提交]{ 不透明度:.5; 指针事件:无; }
现代浏览器不需要JavaScript来禁用输入

输入:无效{ /*背景色:ffdddd*/ } 表单:无效[类型=提交]{ 不透明度:.5; 指针事件:无; }
似乎没有人注意到这一点,所以我将把这个答案放进去,让大家了解一下这里到底发生了什么

你的陈述之所以如此,是因为它不是你认为它是的陈述。让我们检查一下

如果!长度>0是您键入的内容。if中的这个语句实际上是两个语句!首先计算长度,然后将其值与>0进行比较

!!长度计算为布尔值,只有当数字为0时才为真。任何其他数字的计算结果都为false。然后,由于>的左运算符是布尔运算符,因此将>0计算为布尔>布尔运算符,该运算符仅在语句为true>false时计算为true


所以问题不在于语句返回错误,而在于您没有使用所需的语句。你打算写的是如果!length>0{valid=false;}或者更简洁地说,如果length似乎没有人注意到这一点,那么我将把这个答案放在这里,以阐明这里到底发生了什么

你的陈述之所以如此,是因为它不是你认为它是的陈述。让我们检查一下

如果!长度>0是您键入的内容。if中的这个语句实际上是两个语句!首先计算长度,然后将其值与>0进行比较

!!长度计算为布尔值,只有当数字为0时才为真。任何其他数字的计算结果都为false。然后,由于>的左运算符是布尔运算符,因此将>0计算为布尔>布尔运算符,该运算符仅在语句为true>false时计算为true


所以问题不在于语句返回错误,而在于您没有使用所需的语句。你打算写的是如果!长度>0{valid=false;}或者更简洁地说,如果长度也是变量名-长度不理想,应该是值或其他值,那么长度是live表单中输入的标签,因为该值是项目的长度。我认为您的评论的问题是您需要===因为在js中==0将返回True同样变量名-长度也不理想,应该是value或其他值,length是live表单中该输入的标签,因为该值是项目的长度。我认为您的评论的问题是您需要===因为在js中==0将返回true此答案非常完美。我会接受它,只要它允许我。这个答案是完美的。我会尽快接受它。不,这在技术上是可行的,但它要求用户在收到反馈之前单击“提交”。我在现场环境中还有其他指标可以帮助他们。@AnonymousMan不,没有。它只是阻止值大于1,在重读后编辑,现在阻止值小于1。我在评论之前在jsbin中尝试过。它允许我键入一个负数并单击submit,然后提醒我
e是无效的。@AnonymousMan有趣的是,如果通过html elemsNo添加,它就不起作用了。从技术上讲,这是可行的,但它要求用户在获得反馈之前单击“提交”。我在现场环境中还有其他指标可以帮助他们。@AnonymousMan不,没有。它只是阻止值大于1,在重读后编辑,现在阻止值小于1。我在评论之前在jsbin中尝试过。它允许我键入一个负数,然后单击“提交”,然后再提醒我该值无效。@AnonymousMan有趣的是,如果通过html添加,它就不起作用了elems@AnonymousMan是的,我把这个添加到了我的答案中,因为我意识到我并没有真正回答这个问题!对我来说,帕伦斯之外的变量会导致错误。哦,我刚刚意识到,你的长度变量实际上不是一个数字,而是输入字段的值。你打算测试长度吗?那么它实际上应该是length.length,或者正如有人所建议的,变量名length并不是最好的名称。我猜它的类型是number,但我不确定元素上的.value是否返回数字或字符串。很抱歉。好的,您的长度变量实际上是字符串类型。您必须首先将其解析为int,以使用parseInt检查其值是否大于0。@AnonymousMan是的,我将此添加到我的答案中,因为我意识到我实际上没有回答这个问题。实际放置了!对我来说,帕伦斯之外的变量会导致错误。哦,我刚刚意识到,你的长度变量实际上不是一个数字,而是输入字段的值。你打算测试长度吗?那么它实际上应该是length.length,或者正如有人所建议的,变量名length并不是最好的名称。我猜它的类型是number,但我不确定元素上的.value是否返回数字或字符串。很抱歉。好的,您的长度变量实际上是字符串类型。必须首先将其作为int进行分析,以使用parseInt检查其值是否大于0。