javascript警报拒绝在表单验证中工作?

javascript警报拒绝在表单验证中工作?,javascript,forms,validation,Javascript,Forms,Validation,我一直在努力让这些警报正确弹出。我开始使用嵌套函数,然后扔掉它们并将其全部放在一个函数中,现在当我在填写任何一个文本框后按enter键时,它什么也不做,只是将字符串放在url中,而不是像以前那样发出警报。我不确定这是我的函数调用还是其他什么,因为我仔细检查了所有的东西,所有的东西似乎都被我检查出来了。以下是不起任何作用的完整代码: <html xmlns="http://www.w3.org/1999/xhtml"> <HEAD> <TITLE>Smart

我一直在努力让这些警报正确弹出。我开始使用嵌套函数,然后扔掉它们并将其全部放在一个函数中,现在当我在填写任何一个文本框后按enter键时,它什么也不做,只是将字符串放在url中,而不是像以前那样发出警报。我不确定这是我的函数调用还是其他什么,因为我仔细检查了所有的东西,所有的东西似乎都被我检查出来了。以下是不起任何作用的完整代码:

<html xmlns="http://www.w3.org/1999/xhtml">

<HEAD>
<TITLE>Smart Form </TITLE>
<SCRIPT LANGUAGE="JavaScript">

    <!-- VARIABLE DECLARATION -->

    f1.city.focus();

    function check_form()
    {   
        at_sign = email.search(/@/);

        if(document.f1.city.value.length < 1)
        {
            alert('Please enter a city');
            f1.city.focus();
        }
        else if(document.f1.state.value.length != 2 || !(state.charCodeAt('0')>=65 && state.charCodeAt('0')<=91))
        {
            alert('Please enter a state in abreviated form');
            f1.state.focus();
        }
        else if(document.f1.zip.value.length != 5 || document.f1.zip.value.isNaN()==true)
        {
            alert('Please enter a 5 digit zip code');
            f1.zip.focus();
        }
        else if((at_sign<1) || (email.length<3))
        {
            alert('Please enter a valid email address');
            f1.email.focus();
        }
        else
        {
            document.write("Form completed");   
        }

    }

</SCRIPT>
</HEAD> 

<BODY >

    <form name = "f1" action="smartform.html">
        <b>City</b>
        <input type = "text" name = "city" size = "18" value="" onSubmit = "javascript:check_form()">
        <b>State</b>
        <input type = "text" name = "state" size = "4" value="" onSubmit = "javascript:check_form()">
        <b>Zip Code</b>
        <input type = "text" name = "zip" size = "5" value="" onSubmit = "javascript:check_form()">
        <b>Email</b>
        <input type = "text" name = "email" size = "18" value="" onSubmit = "javascript:check_form()">

        <input type = "submit" name = "button" value = "Done" onclick = "javascript:check_form()">
    </form>


</BODY>
</HTML>

智能表格
f1.city.focus();
函数检查表()
{   
at_sign=email.search(/@/);
如果(document.f1.city.value.length<1)
{
警报(“请输入城市”);
f1.city.focus();
}

否则,如果(document.f1.state.value.length!=2 | |!(state.charCodeAt('0')>=65&&state.charCodeAt('0')),则应将提交侦听器放在表单上,并传递对表单的引用,并返回函数返回的任何值,例如

<form onsubmit="return check_form(this);" ...>
f1尚未定义或初始化(请参见上面关于元素名称和全局变量的注释)

f1.email是一个输入元素,它没有搜索属性,您不能调用它。它确实有一个字符串值属性,您的意思可能是:

    var at_sign = f1.email.value.search(/@/);
其次是:

    else if(f1.state.value.length != 2 || !(f1.state.charCodeAt('0')>=65 && state.charCodeAt('0')<=91))
    else if((f1.zip.value.length != 5) || (f1.zip.value.isNaN() == true))
isNaN是一个全局变量,不是字符串方法。如果未输入任何值,则该值为空字符串,
isNaN(“”)
返回false。如果要测试是否输入了5位数字,请使用:

else if (!/^\d{5}$/test(f1.zip.value))
无需针对true进行测试,只需使用它,也无需对简单表达式进行分组:

    else if (f1.zip.value.length != 5 || isNaN(f1.zip.value))
最后,如果所有测试均通过:

    return false;

这将阻止表单提交。您可以省略此返回语句,返回undefined将允许表单提交。如果您确实需要,则返回true。

onSubmit在表单中,而不是在输入中,不使用javascript:Solved=p

<form onsubmit="return check_form();" ...

好的,我想回答你的问题,但首先让我们来看看你的问题
编码并清理它。
将其用作格式正确的代码模板:

<!DOCTYPE html>
  <html>
  <head>
    <title>Smart Form</title>
  </head>
  <body>
    <!-- Code goes here -->
    <script type="text/javascript">

    </script>
  </body>
</html>
Html注释如下所示:

/** Comment. */
<!-- Comment. -->
<!DOCTYPE html>
  <html>
  <head>
    <title>Smart form</title>
  </head>
  <body>
    <form id='smartForm' action='smartform.html'>
      <b>City</b>
      <input type="text" id="city" size="18">
      <b>State</b>
      <input type="text" id="state" size="4">
      <b>Zip Code</b>
      <input type="text" id="zip" size="5">
      <b>Email</b>
      <input type="text" id="email" size="18">
      <input type="submit" value="done">
    </form>
  <script type="text/javascript">
    var validateForm = function(evt) {
      var error = false;
      var cityElement = document.getElementById('city');
      var stateElement = document.getElementById('state');
      var zipElement = document.getElementById('zip');
      var emailElement = document.getElementById('email');

      if (cityElement.value.length != 2 ||
          !(state.charCodeAt(0) >= 65 && state.charCodeAt(0) <= 91)) {
        error = true;
        alert('oops');
        cityElement.focus();
      }

      // etc..

      if (error) {
        evt.preventDefault();
      }
    };
    var smartForm = document.getElementById('smartForm');
    smartForm.addEventListener('submit', validateForm);
  </script>
  </body>
</html>
下一步,我将教你如何快速钓鱼,这样你就可以弄清楚为什么这会被打破,以及将来如何修复这些漏洞。打开开发者控制台。常青浏览器(Chrome、Firefox等)今天要有好的。你应该知道的诀窍是如何评估你的代码,以便你可以看到你在访问数据时是否做错了什么。因此,请查看如何在浏览器中为你的平台打开开发者控制台,并在控制台中键入以下内容:

1+1
应评估为:2。 下一种类型:文档 如果您单击周围,您可以看到您可以稍微遍历dom。 下一步,使用我的上述更改加载smartForm应用程序并键入:

document.getElementById('smartForm')
您应该看到您的元素。这是如何在dom中正确查询对象。 您会注意到,如果键入document.smartForm不起作用。您应该得到null,这应该告诉您应该有一种方法可以从文档中获取元素。提示,它是getElementById。因此,如果您在所有输入中输入id,那么您可以列出所有可以查询的文档对象:

var cityElement = document.getElementById('city');
var stateElement = document.getElementById('state');
var zipElement = document.getElementById('zip');
var emailElement = document.getElementById('email');
接下来,您可以开始查询这些值,就像您刚才所做的那样:

cityElement.value.length != 2
清理后的版本如下所示:

/** Comment. */
<!-- Comment. -->
<!DOCTYPE html>
  <html>
  <head>
    <title>Smart form</title>
  </head>
  <body>
    <form id='smartForm' action='smartform.html'>
      <b>City</b>
      <input type="text" id="city" size="18">
      <b>State</b>
      <input type="text" id="state" size="4">
      <b>Zip Code</b>
      <input type="text" id="zip" size="5">
      <b>Email</b>
      <input type="text" id="email" size="18">
      <input type="submit" value="done">
    </form>
  <script type="text/javascript">
    var validateForm = function(evt) {
      var error = false;
      var cityElement = document.getElementById('city');
      var stateElement = document.getElementById('state');
      var zipElement = document.getElementById('zip');
      var emailElement = document.getElementById('email');

      if (cityElement.value.length != 2 ||
          !(state.charCodeAt(0) >= 65 && state.charCodeAt(0) <= 91)) {
        error = true;
        alert('oops');
        cityElement.focus();
      }

      // etc..

      if (error) {
        evt.preventDefault();
      }
    };
    var smartForm = document.getElementById('smartForm');
    smartForm.addEventListener('submit', validateForm);
  </script>
  </body>
</html>

智能表格
城市
陈述
邮政编码
电子邮件
var validateForm=函数(evt){
var错误=错误;
var citylement=document.getElementById('city');
var statelement=document.getElementById('state');
var zipElement=document.getElementById('zip');
var emailElement=document.getElementById('email');
如果(cityElement.value.length!=2||

!(脚本元素中的state.charCodeAt(0)>=65&&state.charCodeAt(0)
被视为无效的javascript。此外,脚本元素的语言属性在HTML 4中被弃用,并在HTML5中被删除。好吧。但我仍然尝试删除它,但没有任何更改:(将onsubmit侦听器移动到表单,将其从所有控件中删除。不要在任何地方使用
javascript:
。如果验证失败,让函数返回false。让侦听器返回函数返回的任何内容,例如
。您是否声明了
email
?我将一个document.f1.放在我收到电子邮件的所有部分前面..仍然n你说的每一句话我都试过了,但什么都没用!!啊,我甚至会把我的新代码升级我用你更新的建议更新了我的代码,并且它起作用了:D我现在唯一需要做的就是把这些值保存在文本框中,而不是再次将它们刷新为空值。如果成功,我只是在所有if语句的a部分中返回了falsend将onsubmit值更改为返回check_form()现在一切都很完美!!!!!!!!!!!!!谢谢你!我尝试了这个例子,并为其他元素添加了else if's,同时对其进行了适当的编辑,使其像第一个if语句一样跟随,并且在第一次运行后不会发出警报…我还想知道到底是什么原因使我的原始代码无法工作,因为我编写时遵循了课程大纲:(确定首先在修改后的代码中,您将看到f1未定义(f1.email.focus)(打开控制台)。接下来,如果在控制台打开的情况下插入此行“debugger”,然后单击“提交”,您将插入调试模式(打开控制台窗口)。在这里,您可以在控制台中键入变量并查看其值。f1确实是表单元素,但f1.email未定义。您需要获取元素w/element.getElementById(f1.getElementById或document.getElementById).当我快速对错误进行屏幕覆盖时,我明白了你对getElement所说的话,但是我如何才能让控制台在错误消失之前暂停错误?谢谢你发布你的版本,它确实在你的codepen网站上工作。我会
var smartForm = document.getElementById('smartForm');
smartForm.addEventListener('submit', validateForm);
1+1
document.getElementById('smartForm')
var cityElement = document.getElementById('city');
var stateElement = document.getElementById('state');
var zipElement = document.getElementById('zip');
var emailElement = document.getElementById('email');
cityElement.value.length != 2
<!DOCTYPE html>
  <html>
  <head>
    <title>Smart form</title>
  </head>
  <body>
    <form id='smartForm' action='smartform.html'>
      <b>City</b>
      <input type="text" id="city" size="18">
      <b>State</b>
      <input type="text" id="state" size="4">
      <b>Zip Code</b>
      <input type="text" id="zip" size="5">
      <b>Email</b>
      <input type="text" id="email" size="18">
      <input type="submit" value="done">
    </form>
  <script type="text/javascript">
    var validateForm = function(evt) {
      var error = false;
      var cityElement = document.getElementById('city');
      var stateElement = document.getElementById('state');
      var zipElement = document.getElementById('zip');
      var emailElement = document.getElementById('email');

      if (cityElement.value.length != 2 ||
          !(state.charCodeAt(0) >= 65 && state.charCodeAt(0) <= 91)) {
        error = true;
        alert('oops');
        cityElement.focus();
      }

      // etc..

      if (error) {
        evt.preventDefault();
      }
    };
    var smartForm = document.getElementById('smartForm');
    smartForm.addEventListener('submit', validateForm);
  </script>
  </body>
</html>