Javascript代码会冻结浏览器,并且代码只能在firefox中工作

javascript code freezes the browser and the code only works in firefox

本文关键字:代码 firefox 工作 冻结 浏览器 Javascript      更新时间:2023-09-26

我有一个表单,所有的文本框都应该在提交之前填写。我的表单是这样的

<form name="form" method="post" action="url" onsubmit="return checkEmpty(this)" >
<div class="field">
<label>field1</label><input type="text" name="f1" />
</div>
<div class="field">
<label>field2</label><input type="text" name="f2" />
</div>
..
....
......
input type="submit" name="Submit" value="submit" />
</form>

我在这里做的是,当一个表单被提交时,我检查是否有任何文本框是空的,如果有,我创建一个dom元素h3,并将其附加到相应字段的div,如果文本框不是空的,我检查是否有任何文本框附加到相应的字段,如果我找到一个,我删除它。这是我的javascript代码

function checkEmpty(form) {
   var textboxes=form.elements;
   for(var i=0;i<textboxes.length;i++)
   {
      if((textboxes[i].type=="text" || textboxes[i].type=="password") && textboxes[i].textLength==0)   //text box is empty                     
      {
         var msg=document.createElement('h3');
         msg.innerHTML="u cant leave this field blank";
         textboxes[i].parentNode.appendChild(msg);
         return false;
      }
      else                      //text box is not empty
      {
         var rem_msg=textboxes[i].parentNode.getElementsByTagName('h3');
         for(var j=0;j<rem_msg.length;j++)
            textboxes[i].parentNode.removeChild(rem_msg[j]);
      }
   }
}

现在当我提交表单时浏览器冻结了。*也我的代码不工作在谷歌浏览器,但只有firefox*直到我没有删除元素的代码工作良好,但删除元素是必要的,因为说一个用户没有输入任何值在文本框1第一次尝试,所以一个h3元素将被添加,但现在他在第一个文本框中输入一些文本,但留下第二个文本框空,所以第一个文本框的h3元素应该消失。


是因为代码下面的答案是不是再冻结浏览器了呢我仍然只能添加h3元素添加到dom中,但不能删除他们。代码也可以在firefox中工作

问题是您在两个不同的循环中使用了变量i。当内部循环结束时,它总是将i设置为rem_msg.length,这将使外部循环永远不会达到其退出条件,因此您最终会得到一个无限循环。

要解决您的问题,您只需将第二个i重命名为例如j,您就可以开始了。

我想可能是畸形的for:

for(var i=0;i<rem_msg.length;;i++)

你有一个额外的;,所以我认为i++没有运行。