【发布时间】:2011-10-02 01:29:18
【问题描述】:
我有一个表单,提交前应填写所有文本框。我的表格是这样的
<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]);
}
}
}
现在当我提交表单时浏览器冻结。
*我的代码也不能在 ggogle chrome 中工作,只能在 firefox 中工作*
在我没有删除元素之前,代码工作正常,但删除元素是必要的,因为说用户在第一次尝试时没有在文本框 1 中输入任何值,所以会添加一个 h3 元素,但现在他在第一个文本框中输入了一些文本但将第二个文本框留空,因此第一个文本框的 h3 元素应该消失。
因为代码下面的答案 不再冻结浏览器,而是 我仍然只能添加
h3元素到 dom 但不能删除 他们。代码也可以在 Firefox 中使用 但不在谷歌浏览器中。
【问题讨论】:
-
你为什么不用jQuery?这比你需要的代码多得多。
-
贾斯汀摩根:我知道 dis 是一种奇怪的方法,但我想知道为什么浏览器会崩溃?我能理解的唯一原因是 js 执行不能像无限循环一样停止,但我在代码中没有看到任何类似的东西
-
我认为@Martin 有正确的答案,但我也注意到您的
else块中没有return语句。这是否会引发错误或导致冻结可能取决于浏览器,但这可能是一个问题。当checkEmpty(this)可能没有返回值时,您正在调用return checkEmpty(this)。 -
@Justin Morgan:也许你是对的。该代码在谷歌浏览器中不起作用。它只是在 Firefox 中起作用。但是如果将
return放入else块中,那么即使单个文本框不是空的,也会提交表单
标签: javascript firefox dom google-chrome