在做需求的时候,用到了jquery.each循环,对循环遍历的值进行判断,不符合条件的,return false,给出提示,但是遇到的情况是,return false 后,还能继续执行,都走了后台,感觉没有校验住,但又觉得代码写的没错,自己瞎搞了一下午就整好。(没网寸步难行,这是挺听苦逼的)。最后在别人的指导下,修改了下代码,加了一个flag标识判断就好了。(只能说自己很菜,惭愧。。。)
var isFlag = false,colValues=[];
var columns = $("#tableId tr td:nth-child(2)");
$.each(columns,function(index,item){
var inpColumnVal = $(itme).val();
var columnLength =inpColumnVal.length;
if(columnLength > xxx){
$(item).css("color","red");
colValues.push(inpColumnVal );
isFlag = true;
}else{
$(item).css("color","blank");
}
});
if(isFlag){
for(var i=0;item;item=colValues[i];i++){
alert(”当前长度为“ +item.length + “,不能超过xxx”);
}
return false;
}
最后在网上搜了下.找到解决方法,有案例,记录下,学习下。
1. $.each实际上也是jquery的自定义函数, 在循环体内return false表示跳出each函数, return true表示跳出这一次循环, 继续执行下一次循环. 所以要是想跳出整个函数, 只有用变量控制.
<script type="text/javascript">
<!--
function saveData(){
var oCount = 0;
$(".frame1").each(function(){
if(this.value==""){
var temp = $(this).parent().prev().text();
var name = temp.substring(1,temp.length);
oCount ++;
alert(name+"不能为空!");
}
}
)
if(oCount <= 0){
document.form.action="sss.do";
document.form.submit();
}
}
//-->
</script>
2.可以用throw new Error('your message');把return false;替换掉。在each外面try{}catch(e){}处理
function saveData(){
try {
$(".frame1").each(function(){
if (this.value == "") {
var temp = $(this).parent().prev().text();
var name = temp.substring(1, temp.length);
throw name;
}
});
} catch (e) {
alert(e + "不能为空!");
}
document.form.action = "sss.do";
document.form.submit();
}
3.jq 的return false;只是跳出循环而已~要返回值还是要在循环外面做
function test(){
var success = false;
$(..).each(function () {
if (..) {
success = true;
return false;
}
});
return success ;
}
jquery是对象链~所以$(..).each()返回的还是对象集合~each(function(){})~只是回调函数而已~所以在回调函数里不能返回结果到each外面~