【问题标题】:javascript form validation always returns true even when condition matches and should returns false即使条件匹配,javascript表单验证也总是返回true并且应该返回false
【发布时间】:2017-06-02 02:53:38
【问题描述】:

我正在尝试根据 jsfiddle 上的 Vikrant 脚本进行 javascript 表单验证。

我也在 jsfiddle 上制作了自己的脚本 here 它与他的代码非常相似,但由于某种原因,警报永远不会触发,即使不应该提交表单也已提交。

这也发生在我的本地主机中。

这里也是代码:

function FormValidasi() {
  if (document.getElementById('cabang').value == "tor") {
    alert("Mohon pilih cabang nya");
    return false;
  } else if (document.getElementById('tipe').value == "tor") {
    alert("Mohon pilih tipenya");
    return false;
  }
  return (true);
}
<form name="Formulir" method="post" action="2013.php" onsubmit="return FormValidasi();">
  <input type="text" name="cabang" id="cabang" placeholder="Input cabang">
  <br>
  <input type="text" name="tipe" id="tipe" placeholder="Input Tipe">
  <input type="submit" name="submit" value="submit">
</form>

所以如果我在两个字段中输入"tor",或者只在其中一个字段中输入,脚本应该是returning false 并阻止表单提交?但是即使我输入了"tor"

,表单也会提交

【问题讨论】:

    标签: javascript html forms


    【解决方案1】:

    您的代码无法运行的原因是您在此处编码为return (true); 的行。您的JS 代码执行是检查IF 条件并仅返回一个 输出。从你总是return true 意味着脚本执行IF 语句但最终return true 的行,即使你的输入字段有错误。

    function FormValidasi() {
      if (document.getElementById('cabang').value == "tor") {
        alert("Mohon pilih cabang nya");
        return false;
      } else if (document.getElementById('tipe').value == "tor") {
        alert("Mohon pilih tipenya");
        return false;
      }  
    }
    <form name="Formulir" method="post" action="2013.php" onsubmit="return FormValidasi();">
      <input type="text" name="cabang" id="cabang" placeholder="Input cabang">
      <br>
      <input type="text" name="tipe" id="tipe" placeholder="Input Tipe">
      <input type="submit" name="submit" value="submit">
    </form>

    更新 1

    2 个用户提出了合理的论点,我已经更新了 sn-p 以避免出现如下错误。

    未捕获的 ReferenceError:FormValidasi 未在 HTMLFormElement.onsubmit 中定义

    这可以避免将表单提交验证函数作为全局函数。

    window.FormValidasi = FormValidasi;

    更新代码:

    window.FormValidasi = FormValidasi;
    
    function FormValidasi() {
      if (document.getElementById('cabang').value == "tor") {
        alert("Mohon pilih cabang nya");
        return false;
      } else if (document.getElementById('tipe').value == "tor") {
        alert("Mohon pilih tipenya");
        return false;
      }  
    }
    <form name="Formulir" method="post" action="2013.php" onsubmit="return FormValidasi();">
      <input type="text" name="cabang" id="cabang" placeholder="Input cabang">
      <br>
      <input type="text" name="tipe" id="tipe" placeholder="Input Tipe">
      <input type="submit" name="submit" value="submit">
    </form>

    onsubmit function is not defined上阅读有关函数错误的更多信息

    更新 2

    感谢再次查看代码。 OP 正确定义了功能。由于问题是他的功能没有正确执行完全是由于 js 事故。可以通过函数global来避免。

    【讨论】:

    • 当然。 sn-p 在这里工作,它应该满足您的期望。 :)
    • 为什么会这样?为什么return false 语句not 会起作用?如果if 语句的计算结果为true,则应执行受控块内的代码,包括return false,这样就不会到达return true
    • `function FormValidasi() { if(true) { alert("输入有效的东西");返回假; } 返回真; } //当它运行时,它返回“false”。
    • 我认为@FKEinternet 是正确的。它不应该到达return (true)。此外,我的浏览器显示错误FormValidasi is not defined
    • 所以,问题出在不是 return true 语句,它是一个未定义函数 导致表单始终提交。正如预期的那样,return false 语句 do 胜过 return truereturn true 语句应该就位,所以函数总是返回一个值。
    【解决方案2】:

    总结之前接受的答案及其cmets,正确的代码应该是:

    Javascript

    window.FormValidasi = FormValidasi;
    
    function FormValidasi() {
      if (document.getElementById('cabang').value == "tor") {
        alert("Mohon pilih cabang nya");
        return false;
      } else if (document.getElementById('tipe').value == "tor") {
        alert("Mohon pilih tipenya");
        return false;
      }
      return true;
    }
    

    HTML

    <form name="Formulir" method="post" action="2013.php" onsubmit="return FormValidasi();">
      <input type="text" name="cabang" id="cabang" placeholder="Input cabang">
      <br>
      <input type="text" name="tipe" id="tipe" placeholder="Input Tipe">
      <input type="submit" name="submit" value="submit">
    </form>
    

    问题是不是执行的函数的最后一行总是返回true,如已接受答案的第一段所述,而是存在是一个编码错误,阻止函数被执行

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 1970-01-01
      • 2012-01-14
      • 2022-06-28
      • 2020-02-12
      • 1970-01-01
      • 2022-01-16
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多