使用isNaN和!==0的Javascript验证



我是javascript的新手,我有输入框,必须不允许零值或非数字。我最初试图创建一个正则表达式,但我似乎不能得到任何正确的工作。然后我想出了下面的解决方案,但它似乎只在某些时候起作用。我想我的if语句被调高了。任何帮助与代码,只要使它更好,将非常感激。

HTML:

<input name="payrate" id="payrate"></td>
<input name="hours" id="hours" value="0" onclick="dollars()" onchange="dollars()"></td>
Javascript:

    function dollars(){
  var rate = 0;
  rate= document.getElementById("payrate").value;
  var hours= document.getElementById("hours").value;
  if(!isNaN(hours)){
    // !isNan - not a Number
    // !rate == 0 - value not equal to 0
    if (!isNaN(rate) && !rate == 0) {
      //round value of payrate to 2 decimal places
      var adjrate = Math.round(rate*100)/100;
      document.getElementById("payrate").value="";
      document.getElementById("payrate").value= adjrate;
      for (i=0; i<6; i++){
        document.paycheck['tax'+i].disabled = false;
      }
    }else{
      alert("You entered an invalid rate.n"+
      "Please enter your hourly pay.n"+
      "Example: 8.87 value entered: " + rate);
      rate = "";
      disableRadio();
      resetForm();
    }
  }else{
    alert("You entered invalid or empty hours.n"+
    "Please enter the number of hours worked.n"+ hours);
    hours = "";
    disableRadio();
    resetForm();
  }
}

不需要检查两次isNaN。试着像这样简化条件:

function dollars(){
  var rate = 0;
  rate= document.getElementById("payrate").value;
  var hours= document.getElementById("hours").value;
  if(!isNaN(hours)){
    // !isNan - not a Number
    // !rate == 0 - value not equal to 0
    if (rate > 0) {
      //round value of payrate to 2 decimal places
      var adjrate = Math.round(rate*100)/100;
      document.getElementById("payrate").value="";
      document.getElementById("payrate").value= adjrate;
      for (i=0; i<6; i++){
        document.paycheck['tax'+i].disabled = false;
      }
    }else{
      alert("You entered an invalid rate.n"+
      "Please enter your hourly pay.n"+
      "Example: 8.87 value entered: " + rate);
      rate = "";
      disableRadio();
      resetForm();
    }
  }else{
    alert("You entered invalid or empty hours.n"+
    "Please enter the number of hours worked.n"+ hours);
    hours = "";
    disableRadio();
    resetForm();
  }
}

您可以使用<input type="number" min="0.01" step="0.01" value="0.01">元素。看医生。因此,您将确保值rate和hours将是整数

作为示例-您应该能够添加任何您需要的东西,我已经注释掉了一些未包含的附加函数调用-但您应该能够从这里开始。

<input name="payrate" id="payrate">
<input name="hours" id="hours" value="0" onclick="dollar()" onkeyup="dollar()">
<script>
function dollar(){
  var rate = document.getElementById("payrate").value;
  var hours= document.getElementById("hours").value;
  if(!hours || isNaN(hours)){
    alert('hours must be a numeric value greater than zeo');
   // disableRadio();
   // resetForm();
    return false; 
  }
  if (!rate || isNaN(rate)) {
    alert('rate must be a numeric value greater than zeo');
    //disableRadio();
    //resetForm();
    return false; 
  }
  var adjrate = Math.round(rate*100)/100;
  /**
   * commented out for example since not included in example code - 
  document.getElementById("payrate").value="";
  document.getElementById("payrate").value= adjrate;
  for (i=0; i<6; i++){
    document.paycheck['tax'+i].disabled = false;
  }
  */
}
</script>

最新更新