JavaScript - isNaN的相反是什么?

6

我对JavaScript非常陌生,尝试运行一个简单的脚本,如果字段填写不正确(即输入不是数字),则为其添加红色边框,但如果该字段随后被正确填写,则将边框颜色更改为绿色。但是,如果其他字段填写不正确,则无法提交表单。

到目前为止,我已经通过使用以下代码来实现文本字段的上述功能:

function validateForm()
{
var x=document.forms["myForm"]["FN"].value;
if (x==null || x=="")
  {
  alert("First name must be completed");
  document.forms["myForm"]["FN"].style.border="1px solid red";
  return false;
  }
  else (x!==null || x!=="")
  {
  document.forms["myForm"]["FN"].style.border="1px solid green";
  }

但是我现在正在尝试做同样的事情,但限制字段只接受数字。目前我有如下代码:

var x=document.forms["myForm"]["mobile"].value;
if (isNaN(x) || x==null || x=="")
  {
  alert("Contact number must be completed with numbers only");
  document.forms["myForm"]["mobile"].style.border="1px solid red";
  return false;
  }
  else (x!==null || x!=="" || // need to write here is not isNaN !isNaN//)
  {
  document.forms["myForm"]["SN"].style.border="1px solid green";
  }

这将限制字段只允许数字,但一旦表单框的边框变成红色,一旦验证满足,它就不会变成绿色。

如何编写isNan或任何解决方法的任何帮助/提示将不胜感激。

请尽量简单易懂,因为我是一个完全初学者,对于网页设计和JavaScript不熟悉。

谢谢!


10
isNaN的相反操作是!isNaN,读作:"不是不是数字",因此它是一个数字。 - elclanrs
1
为什么不使用一个不进行进一步测试的 else 子句呢?这将导致代码在非数字测试失败时运行,这意味着它必须是一个数字。 - Pointy
@Pointy:else子句怎么可能进行测试? - Qantas 94 Heavy
是的,我现在注意到那个语法不对了... - elclanrs
我设法使用 else (x>=0 || x!==null || x!=="")使其正常工作,但由于这是一个联系电话号码,它应该允许在数字之间有空格(例如0800 123 456而不是0800123456)。有什么办法解决这个问题吗? - cj69
显示剩余3条评论
3个回答

7

isNaN(num)的字面意思相反是!isNaN(num)。然而,这并不总是验证某些东西是否为数字。要检查某些东西是否为数字,请使用jQuery的$.isNumeric(num)或者这个。

function isNumeric(num) {
  return !isNaN(parseFloat(num)) && isFinite(num);
}

一切都是 jQuery - GusDeCooL

3
如果您的代码确实是这样的:

如果您的代码真的看起来像这样:

  else (x>=0 || x!==null || x!=="")
  {
    document.forms["myForm"]["SN"].style.border="1px solid green";
  }

那么,你的问题实际上与isNaN无关。从语法上讲,你的else子句仅适用于括号内的测试表达式。当if子句为false时,将对该表达式进行评估。但它不会对任何事情产生影响,该值只会被抛弃。随后的代码块语句将始终被执行; 它与if-else语句无关。
在JavaScript中,else子句的语法不涉及像if子句那样的测试条件。在你的情况下,“语句”是括号内的测试表达式,虽然无用,但在JavaScript中是完全有效的语句。

很敏锐,也许他的意思是使用 else **if** - platinums

2
自从ECMAScript 2015使用Number.isFinite来检查一个值是否为数字。如果您的值是字符串类型,您可能需要在此之前调用parseIntparseFloat
例如:let isNumber = Number.isFinite(parseInt(my_form_input.value)); 旧版浏览器的polyfill如下:
Number.isFinite = Number.isFinite || function(value) {
  return typeof value === 'number' && isFinite(value);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接