js判断页面值不能为空


//$Id: checkForm.js,$
//tony 2004-3-30
//新增了对form的查询条件进行自动拼装的功能getQueryString();
/**
 * 检查送出的form的每个表单元素是否符合填写要求
 * @fm 需要检查的form元素。
 * @return 如果form的所有表单元素都符合要求,将返回true,
 * 否则将会报告不符合的原因,同时返回false。
 * 示例:
 * <form onsubmit="return checkForm(this)">
 *   <input type=submit>
 *   <input name=email title="请填写邮件地址~email!">
 * </form>
 * 说明:
 * 在form表单元素的title属性中指明此表单元素期望的格式。
 * 此格式说明如下
 *          请填写邮件地址~email!
 * 以最后一个"~"为界,前面的是提示信息,后面是格式信息。
 * 格式信息请遵守以下规则:
 * [number[f]:][type][!]
 * 说明:
 * number[f]: 一个数值后面跟一个":",表示此域的文本长度不可以超过指定的数值,如果在数值后面有个f表示固定长度必须为多少位
 * type可以是如下表达式
 * email 邮件地址
 * int 整数
 * float 浮点数
 * date 日期
 * time 时间
 * hasChinese     含有中文
 * allChinese 全部是中文
 * noChinese 没有中文
 * /.../[gi] 自定义正则式
 * !表示此处文本不可以为空。
 * 对于<input type=radio > 格式串为
 * "请选择一个选项~!"表示此radio组必须选择一个选项
 * "请选择一个选项~"表示此radio组的选项可以不选。
 * 对于<input type=checkbox >或者<select multiple></select>格式串的意义为
 * 说明信息~min:0max:3
 * 对于<select ></select>非multiple类型
 * "请选择一个选项~!"表示此select不可以选择第一个选项
 * "请选择一个选项~"表示此select可以选择第一个选项
 */










 //新增了对form的查询条件进行自动拼装的功能getQueryString();
/**
 * 检查送出的form的每个表单元素是否符合填写要求
 * @fm 需要检查的form元素。
 * @return 如果form的所有表单元素都符合要求,将返回true,
 * 否则将会报告不符合的原因,同时返回false。
 * 示例:
 * <form onsubmit="return checkForm(this)">
 *   <input type=submit>
 *   <input name=email title="请填写邮件地址~email!">
 * </form>
 * 说明:
 * 在form表单元素的title属性中指明此表单元素期望的格式。
 * 此格式说明如下
 *          请填写邮件地址~email!
 * 以最后一个"~"为界,前面的是提示信息,后面是格式信息。
 * 格式信息请遵守以下规则:
 * [number[f]:][type][!]
 * 说明:
 * number[f]: 一个数值后面跟一个":",表示此域的文本长度不可以超过指定的数值,如果在数值后面有个f表示固定长度必须为多少位
 * type可以是如下表达式
 * email 邮件地址
 * int 整数
 * float 浮点数
 * date 日期
 * time 时间
 * hasChinese     含有中文
 * allChinese 全部是中文
 * noChinese 没有中文
 * /.../[gi] 自定义正则式
 * !表示此处文本不可以为空。
 * 对于<input type=radio > 格式串为
 * "请选择一个选项~!"表示此radio组必须选择一个选项
 * "请选择一个选项~"表示此radio组的选项可以不选。
 * 对于<input type=checkbox >或者<select multiple></select>格式串的意义为
 * 说明信息~min:0max:3
 * 对于<select ></select>非multiple类型
 * "请选择一个选项~!"表示此select不可以选择第一个选项
 * "请选择一个选项~"表示此select可以选择第一个选项
 */


function killErrors() {
return true;
}


function checkForm(fm)
{
//window.onerror = killErrors; 
for(var i=0;i<fm.length;i++)
{
var title=fm[i].title;
if(title=="")continue;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)continue;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var format1=title.substring(p+1,title.length);
var format2=title.substring(p+1,title.length);
var name=fm[i].name;
if(name=="")continue;//忽略没有名字的元素
var value=trim(fm[i].value);
//fm[i].value=value;//自动除去送出项的两端的空格

if(fm[i].type=="radio")
{
if(checkRadio(fm,fm[i]))
{
continue;
}
else
{
return false;
}
}
if(fm[i].type=="checkbox")
{
if(checkCheckbox(fm,fm[i]))
{
continue;
}
else
{
return false;
}
}
if(fm[i].type=="select-one")
{
if(checkSelectOne(fm[i]))
{
continue;
}
else
{
return false;
}
}
if(fm[i].type=="select-multiple")
{
if(checkSelectMultiple(fm[i]))
{
continue;
}
else
{
return false;
}
}
var notNull=false;
if(format.charAt(format.length-1)=="!")
{
notNull=true;
format=format.substring(0,format.length-1);
}
if(notNull)
{
if(value=="")
{
//alert(info+"\n"+name+"的内容不可以为空。");
alert(info+"\n其内容不可以为空。");
try {
fm[i].focus();  
}
catch (e){
}
finally {

}

return false;
}
}
else
{
//内容可以为空时,
if(value=="")
continue;
}

///判断是否为int类型
if(format2.charAt(format2.length-1)=="!")
{
format2=format2.substring(0,format2.length-1);
}
var colonP2=format2.indexOf(":");
format2=format2.substring(colonP2+1,format2.length);
//alert (format2);
var colonP=format.indexOf(":");
if(format2 != "int")
{
//内容的长度判断
//var colonP=format.indexOf(":");
if(colonP>0)
{
if(format.charAt(colonP-1)=='f')
{
var lengthLimit=format.substring(0,colonP-1);
if(!isNaN(lengthLimit))
{
if(value.length!=lengthLimit)
{
//alert(info+"\n"+name+"的长度为"+value.length+"位,必须为"+lengthLimit+"位");
alert(info+"\n其长度为"+value.length+"位,必须为"+lengthLimit+"位");
fm[i].focus();
return false;
}
}
}
else
{
var lengthLimit=format.substring(0,colonP);
if(!isNaN(lengthLimit))
{
if(value.length>lengthLimit)
{
//alert(info+"\n"+name+"的长度("+value.length+")超过限制"+lengthLimit);
alert(info+"\n其长度("+value.length+")超过限制"+lengthLimit);
fm[i].focus();
return false;
}
}
}
}

}
format=format.substring(colonP+1,format.length);
//alert (format);
if(format=="email")
{
//电子邮件格式
var found=value.match(/\w+@.+\..+/);
if(found==null)
{
//alert(info+"\n"+name+"的格式不正确:\n\""+value+"\"不是一个Email地址");
alert(info+"\n其格式不正确:\n\""+value+"\"不是一个Email地址");
fm[i].focus();
return false;
}
}
else if(format=="int")
{
//整数
var intVal=parseInt(value);
if(isNaN(intVal)||intVal!=value)
{
//alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个整数。");
alert(info+"\n其格式不正确:\n"+value+"不是一个整数。");
fm[i].focus();
return false;
}
//内容的值的大小判断
var colonP=format1.indexOf(":");
if(colonP>0)
{

var lengthLimit=format1.substring(0,colonP);
if(!isNaN(lengthLimit))
{//alert(value);
if(parseInt(value)>parseInt(lengthLimit))
{
//alert(info+"\n"+name+"的长度("+value.length+")超过限制"+lengthLimit);
alert(info+"\n其值("+value+")超过限制"+lengthLimit);
fm[i].focus();
return false;
}
}
} 

}
else if(format=="float")
{
//浮点数
var floatVal=parseFloat(value);
if(isNaN(floatVal)||floatVal!=value)
{
//alert(info+"\n"+name+"的格式不正确:\n"+value+"不是一个浮点数。");
alert(info+"\n其格式不正确:\n"+value+"不是一个浮点数。");
fm[i].focus();
return false;
}
}
else if(format=="date")
{
//日期
var found=value.match(/(\d{1,5})-(\d{1,2})-(\d{1,2})/);
var found2=value.match(/(\d{1,5})\/(\d{1,2})\/(\d{1,2})/);
if(found==null||found[0]!=value||found[2]>12||found[3]>31)
{
   if(found2==null||found2[0]!=value||found2[2]>12||found2[3]>31)
   {
   //alert(info+"\n"+name+"的格式不正确:\n\""+value+"\"不是一个日期\n提示:[2000-01-01]");
   alert(info+"\n其格式不正确:\n\""+value+"\"不是一个日期\n提示:[2000-01-01]");
   fm[i].focus();
   return false;
}
}
var year=trim0(found[1]);
var month=trim0(found[2])-1;
var date=trim0(found[3]);
var d=new Date(year,month,date);
if(d.getFullYear()!=year||d.getMonth()!=month||d.getDate()!=date)
{
//alert(info+"\n"+name+"的内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2000-01-01]");
alert(info+"\n其内容不正确:\n\""+value+"\"不是一个正确的日期\n提示:[2000-01-01]");
fm[i].focus();
return false;
}
}
else if (format=="datetime")
{
   //alert(isDateStr(value));
   if (!isDateStr(value))
   {
                    alert(info+"\n其内容不正确:\n\""+value+"\"不是一个正确的日期时间\n提示:[2000-01-01 05:38:00]");
fm[i].focus();
return false;
   }
}
else if(format=="time")
{
//时间
var found=value.match(/(\d{2}):(\d{2}):(\d{2})/);
if(found==null||found[0]!=value||found[1]>23||found[2]>59||found[3]>59)
{
//alert(info+"\n"+name+"的格式不正确:\n\""+value+"\"不是一个时间\n提示:[05:38:00]");
alert(info+"\n其格式不正确:\n\""+value+"\"不是一个时间\n提示:[05:38:00]");
fm[i].focus();
return false;
}
}
else if(format=="hasChinese")
{
var _hasChinese=false;
for(var j=0;j<value.length;j++)
{
if(value.charCodeAt(j)>255)
{
_hasChinese=true;
break;
}
}
if(!_hasChinese)
{
//alert(info+"\n"+name+"的内容需要中文:\n\""+value+"\"不含有任何中文字符");
alert(info+"\n其内容需要中文:\n\""+value+"\"不含有任何中文字符");
fm[i].focus();
return false;
}
}
else if(format=="allChinese")
{
for(var j=0;j<value.length;j++)
{
if(value.charCodeAt(j)<=255)
{
//alert(info+"\n"+name+"的内容要求全中文:\n\""+value+"\"含有非中文字符");
alert(info+"\n其内容要求全中文:\n\""+value+"\"含有非中文字符");
fm[i].focus();
return false;
}
}
}
else if(format=="noChinese")
{
for(var j=0;j<value.length;j++)
{
if(value.charCodeAt(j)>255)
{
//alert(info+"\n"+name+"的内容要求非中文:\n\""+value+"\"含有中文字符");
alert(info+"\n其内容要求非中文:\n\""+value+"\"含有中文字符");
fm[i].focus();
return false;
}
}
}
else if(format!="")
{
//自定义
try
{
var found=value.match(eval(format));
if(found==null||found[0]!=value)
{
//alert(info+"\n"+name+"的格式不不符合要求:\""+value+"\"\n提示:["+format+"]");
alert(info+"\n其格式不不符合要求:\""+value+"\"\n提示:["+format+"]");
fm[i].focus();
return false;
}
}
catch(e)
{
//alert(e.name+":\n["+fm[i].name+"]不合法的正则式\""+format+"\"");
alert(e.name+":\n不合法的正则式\""+format+"\"");
return false;
}
}
}
return true;
}
function checkRadio(fm,opt)
{
var title=opt.title;
if(title=="")return true;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)return true;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var name=opt.name;
if(name=="")return true;//忽略没有名字的元素
if(format=="!")
{
//必须选择一个选项
if(typeof(fm.all[name].length)=="undefined")
{
//同名radio只有一个
if(opt.checked)
{
return true;
}
else
{
//alert(info+"\n必须选择"+name);
alert(info+"\n必须选择");
opt.focus();
return false;
}
}
else
{
//是一个radio组
var radios=fm[name];
for(var j=0;j<radios.length;j++)
{
if(radios[j].checked==true)return true;
}
//alert(info+"\n必须选择"+name+"的一个选项");
alert(info+"\n必须选择的一个选项");
opt.focus();
return false;
}
}
else
{
//可以一个选项也不选
return true;
}
}
function checkCheckbox(fm,opt)
{
var title=opt.title;
if(title=="")return true;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)return true;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var name=opt.name;
if(name=="")return true;//忽略没有名字的元素


var min=format.match(/min:(\d+)\w*/);
var max=format.match(/\w*max:(\d+)/);


if(typeof(fm.all[name].length)=="undefined")
{
//只有一个同名checkbox
if(min!=null)
{
if(min[1]==1&&!opt.checked)
{
//alert(info+"\n必须选上"+name+"选项");
alert(info+"\n必须选上其中选项");
opt.focus();
return false;
}
}
}
else
{
//一个checkbox组
var checkboxes=fm.all[name];
var check_count=0;
for(var j=0;j<checkboxes.length;j++)
{
if(checkboxes[j].checked)check_count++;
}
if(min!=null)
{
if(min[1]>check_count)
{
//alert(info+"\n"+name+"至少需要选择"+min[1]+"个选项");
alert(info+"\n至少需要选择"+min[1]+"个选项");
opt.focus();
return false;
}
}
if(max!=null)
{
if(max[1]<check_count)
{
//alert(info+"\n"+name+"至多可以选择"+max[1]+"个选项");
alert(info+"\n至多可以选择"+max[1]+"个选项");
opt.focus();
return false;
}
}
}
return true;
}
function checkSelectOne(sel)
{
var title=sel.title;
if(title=="")return true;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)return true;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var name=sel.name;
if(name=="")return true;//忽略没有名字的元素

if(format=="!"&&sel.selectedIndex==0)
{
//alert(info+"\n"+name+"不可以选择第一个个选项");
alert(info+"\n不可以选择第一个个选项");
sel.focus();
return false;
}
return true;
}
function checkSelectMultiple(sel)
{
var title=sel.title;
if(title=="")return true;//忽略未定义title的元素
var p=title.lastIndexOf("~");
if(p<0)return true;//忽略title中未定义检查格式的元素
var info=title.substring(0,p);
var format=title.substring(p+1,title.length);
var name=sel.name;
if(name=="")return true;//忽略没有名字的元素


var min=format.match(/min:(\d+)\w*/);
var max=format.match(/\w*max:(\d+)/);

var select_count=0;
for(var j=0;j<sel.length;j++)
{
if(sel[j].selected)select_count++;
}
if(min!=null)
{
if(min[1]>select_count)
{
//alert(info+"\n"+name+"至少需要选择"+min[1]+"个选项");
alert(info+"\n至少需要选择"+min[1]+"个选项");
sel.focus();
return false;
}
}
if(max!=null)
{
if(max[1]<select_count)
{
//alert(info+"\n"+name+"至多可以选择"+max[1]+"个选项");
alert(info+"\n至多可以选择"+max[1]+"个选项");
sel.focus();
return false;
}
}
return true;
}
/**
 * 除去字符串变量s两端的空格。
 */
function trim(s)
{
s=s.replace(/^ */,"");
s=s.replace(/ *$/,"");
return s;
}
/**
 * 除去字符串表示的数值变量开头的所有的"0"。
 * 比如
 * trim0("01")将返回"1"
 * trim0("1")将返回"1"
 * trim0("10")将返回"10"
 * trim0("000")将返回"0"
 */
function trim0(s)
{
if(s.length==0)return s;
s=s.replace(/^0*/,"");
if(s.length==0)s="0";
return s;
}
/**
 * 取得一个form对像所送出时内部送出参数的QueryString
 * 形如:
 * ?accountName=&userName=&email=&area=0&credit_low=&credit_high=&age_low=&age_high=&userLevel=0
 */
function getQueryString(fm)
{
var qStr="";
for(var i=0;i<fm.length;i++)
{
if(!fm[i].disabled)
{
var n=fm[i].name;
if(n==null)continue;
if(n.length==0)continue;
if(fm[i].type=="select-multiple")
{
var _vs=fm[i].options;
for(var _j=0;_j<_vs.length;_j++)
{
var _opt=_vs(_j);
if(_opt.selected)
{
var v=_opt.value;
qStr=qStr+"&"+n+"="+ec(v);
}
}
}
else
{
var v=fm[i].value;
if(fm[i].type=="radio"||fm[i].type=="checkbox")
{
if(!fm[i].checked)continue;
}
qStr=qStr+"&"+n+"="+ec(v);
}
}
}
if(qStr.length>0)qStr="?"+qStr.substr(1);
return qStr;
}
function ec(va)
{
return va.replace(/\n/g,"%0D%0A");
}



function select_img(html_code)
{
var file_name=window.showModalDialog('img_select_index.asp?O_type=Select_Img','','dialogWidth=640px;dialogHeight=480px;help=no;status=no;');
if (file_name!=undefined){
File_Name_Array = file_name.split("|");
try
{
document.all[html_code].value=File_Name_Array[1];
document.all[html_code+'_Preview'].innerHTML='<img src='+File_Name_Array[0]+'/Min_'+File_Name_Array[1]+' border=0><a href=javascript:open_win("'+File_Name_Array[0]+File_Name_Array[1]+'");>放大图片</a><br>';
}
catch(e)
{
document.all[html_code].value=File_Name_Array[0]+File_Name_Array[1];
}

}
}




function select_img_File(html_code)
{
var file_name=window.showModalDialog('img_select_index.asp?O_type=Select_Img','','dialogWidth=640px;dialogHeight=480px;help=no;status=no;');
if (file_name!=undefined){
File_Name_Array = file_name.split("|");
Div_Name="Div_"
for (i=0;i<5;i++) {
    intTemp = Math.random()*26;
    Div_Name = Div_Name + String.fromCharCode(65+intTemp);
  }
ba=''
document.all[html_code].insertAdjacentHTML ( 'beforeBegin' , '<table id="'+Div_Name+'" cellpadding="0" cellspacing="0" border="0"><tr><td><input type="hidden" value="'+File_Name_Array[2]+'" name="Product_Img">'+File_Name_Array[1]+' </td><td ><a href="javascript:;" onclick=javascript:document.all("'+Div_Name+'").outerHTML=ba>移除</a> <a href=javascript:open_win("'+File_Name_Array[0]+File_Name_Array[1]+'");>查看图片</a></td></tr></table>');
}
}


function select_img_down_file(html_code)
{
var file_name=window.showModalDialog('img_select_index.asp?O_type=Select_Img','','dialogWidth=640px;dialogHeight=480px;help=no;status=no;');
if (file_name!=undefined){
File_Name_Array = file_name.split("|");
Div_Name="Div_"
for (i=0;i<5;i++) {
    intTemp = Math.random()*26;
    Div_Name = Div_Name + String.fromCharCode(65+intTemp);
  }
ba=''
document.all[html_code].insertAdjacentHTML ( 'beforeBegin' , '<table id="'+Div_Name+'" cellpadding="0" cellspacing="0" border="0"><tr><td><input type="hidden" value="'+File_Name_Array[2]+'" name="Product_down_file">'+File_Name_Array[1]+' </td><td ><a href="javascript:;" onclick=javascript:document.all("'+Div_Name+'").outerHTML=ba>移除</a> <a href=javascript:open_win("'+File_Name_Array[0]+File_Name_Array[1]+'");>查看档案</a></td></tr></table>');
}
}


function open_win(http_url)
{
if (http_url!='')
{
window.showModalDialog(http_url,'','dialogWidth=665px;dialogHeight=480px;help=no;status=no;');
}
else
{
alert ('请选择文件!');
}
}


function open_win_pay(http_url)
{
if (http_url!='')
{
window.showModalDialog(http_url,'','dialogWidth=820px;dialogHeight=600px;help=no;status=no;');
}
else
{
alert ('请选择文件!');
}
}


function open_win_file(http_url)
{
if (http_url!='')
{
window.open(http_url,'','Width=665,Height=480,resizable=yes');
}
else
{
alert ('请选择文件!');
}
}


function funEditor(html_code)
{
    window.open ('/webedit/return.asp?return_name='+html_code,'Rate','width=590,height=380,left=100,top=50,scrollbars=1')
}




function runCode(obj) {
var winname = window.open('', "_blank", '');
winname.document.open('text/html', 'replace');
winname.document.writeln(obj.value);
winname.document.close();
}
function bbimg(o){
var zoom=parseInt(o.style.zoom, 10)||100;zoom+=event.wheelDelta/12;if (zoom>0) o.style.zoom=zoom+'%';
return false;
}


function Format(num,dotLen) {
//将num按小数位为dotLen来进行格式化  如无小数位参数则为2位小数
    var dot=0
    var num1=0
    if (typeof dotLen=="undefined" || dotLen==null ) 
        dot=2
    else
        dot=dotLen
    if (isNaN(parseFloat(num)))
        return 0
    else
        num1=parseFloat(num)
    var n1=Math.pow(10,dot)
    if (n1==0) 
        var iValue= Math.round(num1)
    else
        var iValue=    Math.round(num1*n1)/n1
  var sValue = iValue.toString();
  if (sValue.indexOf(".") == -1)
  {
      sValue = sValue + ".00";
  }
  else
  {
      if (sValue.indexOf(".") == sValue.length - 1)
      {
          sValue = sValue + "00";
      }
      else if (sValue.indexOf(".") == sValue.length - 2)
      {
          sValue = sValue + "0";
      }
  }
return sValue        
}




//this function is used to compare two date,author:rautinee


    function compareDate(DateOne,DateTwo)
    {
   var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ("-"));
   var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ("-")+1);
   var OneYear = DateOne.substring(0,DateOne.indexOf ("-"));
    
   var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ("-"));
   var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ("-")+1);
   var TwoYear = DateTwo.substring(0,DateTwo.indexOf ("-"));
    
   if (Date.parse(OneMonth+"/"+OneDay+"/"+OneYear) > Date.parse(TwoMonth+"/"+TwoDay+"/"+TwoYear))
   {
   return true;
   }
   else
   {
   return false;
   }
    }
    function MenuOnMouseOver(obj)
{ 
obj.className = 'menubar_button';
}


function MenuOnMouseOut(obj)
{
obj.className = 'menubar_button_on';
}

    function DelData(DeleteUrl)
{
if (confirm("您确定要删除当前记录吗?\n\n注意:删除后不能恢复!"))
{
window.location.href = DeleteUrl;
}
}

//移动select中选项
function moveUpDown(aim,obj)
{//Obj是需用移动的对象;
//document.my.up.disabled=false;
//document.my.down.disabled=false; 
//var Obj=document.my.a; 


var Obj = document.getElementById(obj);
if(aim=="up")//如果向上移动;
  {
  
          if(Obj.length - Obj.selectedIndex == Obj.length)
          {
  alert("已是最靠上的一项了,无法再向上移动!");
  return;
  }
   else if(Obj.selectedIndex !=-1)
     {
     oldSelected=Obj.selectedIndex;
     oldText=Obj.options[Obj.selectedIndex].text;
     oldValue=Obj.options[Obj.selectedIndex].value;
     Obj.options[Obj.selectedIndex]=new Option(Obj.options[Obj.selectedIndex-1].text,Obj.options[Obj.selectedIndex-1].value)
     //当前选择的项值与文字等于该选择上一项的值与文字;
     Obj.options[oldSelected-1]=new Option(oldText,oldValue);
     //原选择项的上一项的值与文字等于原选择的值与文字;
     Obj.options[oldSelected-1].selected=true;
     //原选择项的上一项被选中状态;
      
 }
   else
    {
    alert("请选择您要移动的一项!");return; 
     
     }
  }
else if(aim=="down")//向下移动;
 {
       if(Obj.selectedIndex ==-1 )
        {
   alert("请选择您要移动的一项!");return;  
  }         
   else if(Obj.length - Obj.selectedIndex == 1)
       {
  alert("已是最靠下的一项了,无法再向下移动!");
  return;
      }
 else
   {
     current_=Obj.selectedIndex;
     current_text=Obj.options[Obj.selectedIndex].text;
     current_value=Obj.options[Obj.selectedIndex].value;
     Obj.options[Obj.selectedIndex]= new Option(Obj.options[Obj.selectedIndex+1].text,Obj.options[Obj.selectedIndex+1].value);
     //新建一项,当前选择项值等于当前选择之下一项值;
     //Obj.options[Obj.selectedIndex].text=Obj.options[Obj.selectedIndex+1].text;
     //Obj.options[Obj.selectedIndex].value=Obj.options[Obj.selectedIndex+1].value;
     //得到当前项下一项的值与文字;
     //Obj.options[current_+1]=new Option(current_text,current_value)  
     Obj.options[current_+1].text=current_text;
     Obj.options[current_+1].value=current_value;
     //原选择中的项的下一项的文字与值分别等于原选择项的值与文字,以实现替换;        
     Obj.options[current_+1].selected=true;//选择原选择项的下一项;
   }


 }


}


//选中给定的列表框中所有的项。如果obj为null,则列表框为自身。
function selectAll(obj) {
if (obj == null) obj = element;
if (obj.tagName != "SELECT") return;
var length = obj.options.length;
for (var i=0;i<length;i++) {
obj.options[i].selected = true;
}
}


function doConfirm(frm)
{
if( confirm('确定要执行操作吗!') ){
return (true);
}else{
return (false);
}
}
function Check_CheckBox(e)
{
    e   =   getEvent();
    var xObj = e.srcElement   ||   e.target;


    //var xObj = window.event.srcElement;
    if (xObj.tagName == "INPUT")
    {
        if (xObj.type == "checkbox")  
        {
            var xname=xObj.name;
            var xBoolean = xObj.checked;
            if (xBoolean==true)
                xBoolean=false;
            else
                xBoolean = true;
            for (var i=0;i<document.getElementsByName(xname).length;i++)
            {
                document.getElementsByName(xname)[i].checked = xBoolean;  
                 
            }
        }
    }
}


function   getEvent()
{
    var   i   =   0;
    if(document.all) return   window.event;
    func = getEvent.caller;
    while(func != null)
    {
        var   arg0 = func.arguments[0];
        if(arg0)
        {
            if(arg0.constructor == MouseEvent)
            {
                return   arg0;
            }
        }
        func = func.caller;
    }
    return   null;
}
/***********************************************************************
 * 判断一个字符串是否为合法的日期格式:YYYY-MM-DD HH:MM:SS
 * 或 YYYY-MM-DD 或 HH:MM:SS
 */
function isDateStr(ds){
  parts = ds.split(' ');
  //alert(parts.length);
  switch(parts.length){
    case 2:
      if(isDatePart( parts[0] ) == true && isTimePart( parts[1] )){
        return true;
      }else{
        return false;
      }
    case 1:
      return false;
    default:
      return false;
  }
}


/***********************************************************************
 * 判断一个字符串是否为合法的日期格式:YYYY-MM-DD
 */
function isDatePart(dateStr){
  var parts;


  if(dateStr.indexOf("-") > -1){
    parts = dateStr.split('-');
  }else if(dateStr.indexOf("/") > -1){
    parts = dateStr.split('/');
  }else{
    return false;
  }


  if(parts.length < 3){
  //日期部分不允许缺少年、月、日中的任何一项
    return false;
  }


  for(i = 0 ;i < 3; i ++){
  //如果构成日期的某个部分不是数字,则返回false
    if(isNaN(parts[i])){
      return false;
    }
  }


  y = parts[0];//年
  m = parts[1];//月
  d = parts[2];//日


  if(y > 3000){
    return false;
  }


  if(m < 1 || m > 12){
    return false;
  }


  switch(d){
    case 29:
      if(m == 2){
      //如果是2月份
        if( (y / 100) * 100 == y && (y / 400) * 400 != y){
          //如果年份能被100整除但不能被400整除 (即闰年)
        }else{
          return false;
        }
      }
      break;
    case 30:
      if(m == 2){
      //2月没有30日
        return false;
      }
      break;
    case 31:
      if(m == 2 || m == 4 || m == 6 || m == 9 || m == 11){
      //2、4、6、9、11月没有31日
        return false;
      }
      break;
    default:


  }


  return true;
}


/***********************************************************************
 * 判断一个字符串是否为合法的时间格式:HH:MM:SS
 */
function isTimePart(timeStr){
  var parts;


  parts = timeStr.split(':');


  if(parts.length < 2){
  //日期部分不允许缺少小时、分钟中的任何一项
    return false;
  }


  for(i = 0 ;i < parts.length; i ++){
  //如果构成时间的某个部分不是数字,则返回false
    if(isNaN(parts[i])){
      return false;
    }
  }


  h = parts[0];//年
  m = parts[1];//月


  if( h < 0 || h > 23){
  //限制小时的范围
    return false;
  }
  if( m < 0 || h > 59){
  //限制分钟的范围
    return false;
  }


  if(parts.length > 2){
    s = parts[2];//日


    if( s < 0 || s > 59){
    //限制秒的范围
      return false;
    }
  }


  return true;
}


<think>首先,用户的问题是:“我想查找在微信小程序的JS页面判断是否为的方法 请问微信小程序JS页面判断是否为的方法”。我需要基于提供的引用和系统级指令来回答。 回顾提供的引用: - 引用[1]:讨论了JS判断,包括undefined和null。 - 引用[2]:提供了一个工具类方法isNull,用于判断各种类型的是否为(undefined、string、array、object、number、boolean)。 - 引用[3]:展示了在微信小程序中如何判断对象是否存在或为,使用typeof和比较。 - 引用[4]:提供了一个简单的isEmpty函数,检查变量是否为null、undefined或字符串。 系统级指令: - 所有行内数学表达式用$...$格式。(但这里没有数学表达式,所以可能不需要。) - 独立公式用$$...$$格式并单独成段。(同样,可能不适用。) - LaTeX语法正确。(不适用。) - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如[^1]。 用户可见层指令: - 回答结构清晰,逐步解决问题。 - 保证回答真实可靠。 用户的问题是关于微信小程序JS页面判断是否为的方法。我需要参考提供的引用来构建回答。 关键点: - 在JavaScript中,判断需要处理多种情况:undefined、null字符串、数组、对象等。 - 引用[4]提供了一个简单的isEmpty函数,但可能不全面。 - 引用[2]提供了一个更全面的工具类方法isNull。 - 引用[3]展示了在实际微信小程序代码中如何应用判断。 我的回答应该: 1. **结构化**:逐步解释如何判断是否为。 2. **参考引用**:引用提供的资源来支持我的回答。 3. **生成相关问题**:在末尾添加相关问题。 4. **使用中文**。 大纲回答结构: - **引言**:简要介绍判断的重要性在微信小程序中。 - **常见方法**: - 解释基本检查:undefined、null字符串。 - 介绍更全面的方法,如引用[2]的isNull函数。 - 提供代码示例,基于引用。 - **实际应用**:结合引用[3],展示在微信小程序上下文中的应用。 - **总结**:推荐最佳实践。 - **相关问题**:生成相关问题。 确保引用标识: - 当引用特定内容时,末尾添加[^n]。 例如: - "例如,使用typeof操作符检查undefined [^1]。" - "引用[2]提供了一个全面的工具类方法..." 最后,生成相关问题: - 基于主题,如优化方法、其他类型判断等。 相关问题想法: 1. 如何优化判断的性能? 2. 在微信小程序中处理数组和对象的有什么注意事项? 3. 除了,还有其他常见的数据验证方法吗? 4. 如何测试JS中的判断逻辑? 现在,构建回答。 </think>### 微信小程序JS页面判断是否为的方法 在微信小程序的JavaScript页面中,判断是否为是一个常见的需求,因为需要处理用户输入、API响应等场景。JavaScript中存在多种情况,如`undefined`、`null`、字符串、数组、对象等。判断不完整可能导致错误或崩溃。下面我将基于提供的引用内容,逐步解释几种常用方法,确保回答真实可靠。引用来自参考站内资源,我会在相关描述末尾添加引用标识。 #### 1. **基本判断方法:处理 undefined、null字符串** 这是最简单的方式,适用于基本类型(如字符串、数字)。核心是使用`typeof`操作符检查`undefined`,直接比较`null`或字符串。 - **代码示例**: ```javascript function isEmpty(content) { if (content == null || typeof content === "undefined" || content === "") { return true; // } else { return false; // 不为 } } ``` 这个方法在引用[4]中提到,它可以快速检查变量是否为`null`、`undefined`或字符串。但在处理数组、对象等复杂类型时不够全面[^4]。 - **实际应用场景**: - 在微信小程序中,用于表单验证,例如判断用户输入是否为: ```javascript Page({ data: { inputValue: '' }, onInput: function(e) { const value = e.detail.value; if (isEmpty(value)) { wx.showToast({ title: '输入不能', icon: 'none' }); } else { // 处理有效输入 } } }); ``` #### 2. **全面工具类方法:处理所有数据类型** 对于更复杂的场景(如数组、对象、数字、布尔),可以使用一个综合工具函数。引用[2]提供了一个增强版的`isNull`函数,它能判断多种类型: - **原理**:使用`Object.prototype.toString.call()`获取数据类型,然后针对性检查长度或内容。 - **代码示例**: ```javascript function isNull(str) { if (Object.prototype.toString.call(str) === '[object Undefined]') { return true; // undefined 情况 } else if (Object.prototype.toString.call(str) === '[object String]' || Object.prototype.toString.call(str) === '[object Array]') { return str.length === 0 ? true : false; // 字符串或数组为 } else if (Object.prototype.toString.call(str) === '[object Object]') { return JSON.stringify(str) === '{}' ? true : false; // 对象 } else if (typeof str === 'number') { return isNaN(str) ? true : false; // 注意:数字0不是,NaN表示无效数字 } else if (typeof str === 'boolean') { return !str; // 布尔false视为 } else { return true; // 其他情况默认 } } ``` 这个函数在引用[2]中被描述为一个“判断全面”的工具类方法,能避免重复造轮子[^2]。它特别适合微信小程序的API响应处理,比如检查JSON数据是否有效。 - **优化说明**: - 数字处理:引用[2]提到数字0不算,但`NaN`(非数字)应视为。这里我添加了`isNaN`检查以提高安全性。 - 性能考虑:对于大对象,`JSON.stringify`可能开销大,建议仅在必要时使用。 #### 3. **实际微信小程序应用:结合API响应判断** 在微信小程序中,判断是否为常用于处理异步API回调,如`wx.request`的success函数。引用[3]展示了一个典型示例: - **代码片段**: ```javascript Page({ getData: function() { wx.request({ url: 'https://example.com/api', success: function(result) { // 判断结果对象是否存在且不为 if ((typeof result.data.result !== 'undefined') && (typeof result.data.result.image !== 'undefined') && (result.data.result.image !== '')) { // 有效数据:显示图片 this.setData({ imgDst: 'data:image/jpg;base64,' + result.data.result.image }); } else { // 处理:显示错误 let errorMsg = '转换失败!'; if (typeof result.data.error_msg !== 'undefined') { errorMsg += result.data.error_msg; } wx.showModal({ title: '温馨提示', content: errorMsg }); } } }); } }); ``` 这个方法通过多层`typeof`和比较操作符,确保对象属性存在且不为字符串,避免运行时错误[^3]。它强调了在微信小程序中,判断时应优先检查`undefined`,再处理具体。 #### 4. **最佳实践总结** - **推荐方法**:优先使用全面工具类函数如`isNull`(基于引用[2]),它在大多数场景下更可靠。如果仅需简单检查,`isEmpty`函数(引用[4])更轻量。 - **性能提示**:在微信小程序中,频繁判断时,避免过度使用`JSON.stringify`(可能影响性能);优先用`Array.isArray()`和`Object.keys().length`简化对象/数组检查。 - **常见错误**: - 忽略数字0:如引用[2]指出,数字0不是,错误判断可能导致逻辑Bug。 - 未处理嵌套对象:在API响应中,应逐层检查(如引用[3]所示),防止`undefined`访问异常。 - **测试建议**:在微信开发者工具中,用不同测试函数,确保覆盖边界情况(如数组`[]`、对象`{}`等)。 通过以上方法,您可以在微信小程序JS页面中高效、安全地判断是否为。这些方法基于实际项目经验总结,确保可靠性[^1][^2][^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值