我有一个jquery来验证我的下拉列表。如果单选框上的"是",我可以从下拉列表中选择。如果单选框下拉列表中的"否"为灰色。
如果两个单选框都是"是",并且两个下拉列表中的值都是"请选择",并且单击了提交按钮,则会发生验证错误,并且不会重定向到index.html。
如果一个无线电盒子处于"是"&下拉列表中的"请选择"和另一个位于"否"且值为"红色"的下拉列表和提交按钮被单击,会出现验证错误occurs并重定向到index.html。显然,这违背了验证的目的。
我希望有人能帮我,因为这会让我发疯。!
我已经把它缩小到这个问题:
});
$("input:submit").click(function(){
var retVal = false;
$.each([1, 2], function(i, val){
retVal = (validate(val) || retVal);
});
return retVal;
});
如果我理解正确,您有一个validate()
函数(您没有显示),它验证指定的项,如果OK则返回true
,如果无效则返回false
。在提交时,您希望为多个项目调用validate()
,如果其中任何返回false
,则将false
返回提交(相反,仅当所有的验证都是true
时,才返回true
。
按照现有代码设置retVal
的方式,一旦它变成true
,它将保持true
,因为validate()
与true
进行OR运算的任何布尔结果都将是true
。试试这个:
$("input:submit").click(function(){
var retVal = true;
$.each([1, 2], function(i, val){
retVal = validate(val) && retVal;
});
return retVal;
});
这从默认返回true
开始,然后如果validate(val)
返回false
,则将其更改为false
。使用&&
而不是||
则意味着一旦retVal
是false
,它将保持false
。在我看来,完全去掉&&
并说:会更清楚
if (!validate(val)) retVal = false;