我有一个案例,我在屏幕上有一堆文本框和单选按钮,所有这些都是用各种 DIV 动态构建的。所有文本框都有 onblur 例程来验证条目,但根据单选按钮的选择,文本框条目在最初有效时可能无效。我不能将 onblur 与单选按钮一起使用,因为它们可以从单选按钮进入无效的文本框之一并创建无限循环,因为我将焦点放在无效元素上。由于每个文本框都有自己的 onblur 调用特殊参数,我认为最好的方法是在提交表单时调用文本框的 onblur 事件,以确保所有条目在单选按钮配置下仍然有效已选择。如果其中一个 onblur 事件返回 false,我还需要它停止提交,以便他们可以更正错误的文本框。这是我写的...
for (var intElement = 0; intElement < document.forms[0].elements.length; intElement = intElement + 1)
{
if (document.forms[0].elements[intElement].name.substr(3) == "FactorAmount") // The first 3 characters of the name are a unique identifier for each field
{
if (document.forms[0].elements[intElement].onblur())
{
return false;
break;
}
}
}
return true;
我最初有 (!document.forms[0].elements[intElement].onblur()) 但是当我有那个时,来自 onblur 事件的警报消息没有弹出。现在警报消息正在弹出,但如果遇到错误,它仍会继续循环遍历元素。我已经用调试器两种方式逐步完成了这个,它似乎循环得很好,但它要么是1)在我需要它时没有停止并返回false,要么2)没有执行我的警报消息来告诉用户什么错误是。有人可以帮忙吗?这可能是我正在做的愚蠢的事情。
被调用的 onblur 方法看起来像这样......
function f_VerifyRange(tagFactor, reaMin, reaMax, intPrecision, sLOB, sIL, sFactorCode)
{
var tagCreditOrDebit;
var tagIsTotal;
var tagPercentageOrDecimal;
eval("tagCreditOrDebit = document.forms[0]." + tagFactor.name.substr(0,3) + "CreditOrDebitC");
eval("tagIsTotal = document.forms[0]." + tagFactor.name.substr(0,3) + "IsTotal");
eval("tagPercentageOrDecimal = document.forms[0]." + tagFactor.name.substr(0,3) + "PercentageOrDecimal");
if (tagPercentageOrDecimal.value == "P")
{
reaMax = Math.round((reaMax - 1) * 100);
reaMin = Math.round((1 - reaMin) * 100);
if (parseFloat(tagFactor.value) == 0)
{
alert("Please enter a value other than 0 or leave this field blank.");
f_SetFocus(tagFactor);
return false;
}
if (tagIsTotal.value == "True")
{
if (tagCreditOrDebit.checked)
{
if (parseFloat(tagFactor.value) > reaMin)
{
alert("Please enter a value less than or equal to " + reaMin + "% for a credit or " + reaMax + "% for a debit.");
f_SetFocus(tagFactor);
return false;
}
}
else
{
if (parseFloat(tagFactor.value) > reaMax)
{
alert("Please enter a value less than or equal to " + reaMin + "% for a credit or " + reaMax + "% for a debit.");
f_SetFocus(tagFactor);
return false;
}
}
}
}
return true;
}
编辑:我想我已经弄清楚为什么这不能按预期工作,但我仍然不知道如何完成我需要做的事情。下面的行...
if (!document.forms[0].elements[intElement].onblur())
或者
if (document.forms[0].elements[intElement].onblur())
没有返回单个 onblur 函数 (f_VerifyRange) 返回的内容。相反,无论如何它总是返回真或假。在第一种情况下,它返回 true,然后在第一个文本框之后退出并中止提交,即使第一个文本框没有错误。在第二种情况下,它返回 false 并遍历所有框。即使可能有错误(它显示),它也不认为有任何错误,所以它继续提交。我想我真正需要的是如何从我的 onblur 函数 f_VerifyRange 获取返回值。