`
wfzhanga
  • 浏览: 70272 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

日常JS页面验证封装

阅读更多
/***********************************
* JSP页面输入有效性校验
* author:
* create date:
* update date:
* update content: 此文件在原先使用文件checkvalue.jsp基础上,结合原先的使用经验做了如下改进
* 1 增加函数CheckSpecChar(FormName),直接校验整个form的所有输入控件是否包含非法字符。
* 2 函数CheckInputValue原先传入参数输入框内容,改为输入框对象名称,这样一旦校验不通过,光标可以定位到对象。
* 3 优化日期校验,原先对日期格式只校验输入字符,没有校验长度以及yyyy-mm-dd格式中年月日各自是否满足要求。
* 4 优化Email格式校验
* 5 原先输入框允许为空,同时如果输入内容有最短长度限制时候,无法校验,现已修改,能够支持。
*
* 增加系数Rate类型,不能大于1
* 增加时间Time类型,24h:mi格式
*********************************/
//提交表单时清理所有的非隐藏表单元素值的左右空格并校验是否含有非法字符--liuchuang
function submitclean(FormName){
var str = "'<>\""; //非法字符集
for (var index = 0; index < FormName.elements.length; index++) {
if(FormName.elements[index].type != "hidden"){
//去除左右空格
FormName.elements[index].value = FormName.elements[index].value.replace(/^\s+|\s+$/g,"");
for(i = 0; i < FormName.elements[index].value.length; i++){
if (str.indexOf(FormName.elements[index].value.substring(i,i + 1)) >= 0){
alert("输入的内容不能含有非法字符:" + str);
FormName.elements[index].focus();
return false;
}
}
}
}
return true;
}
//该函数用于带查询条件的显示页面,页面加载时判断哪个form元素应该默认获得焦点--liuchuang
function formFocus(FormName){
var isfocus =false;
for (var index = 0; index < FormName.elements.length; index++) {
if(FormName.elements[index].className=='lc') continue;
if(FormName.elements[index].tagName=='INPUT'
|| FormName.elements[index].tagName=='SELECT'
|| FormName.elements[index].tagName=='TEXTAREA')
{
if(FormName.elements[index].type != "hidden" && FormName.elements[index].value!=""){

FormName.elements[index].focus();
isfocus =true;
break;
}
}
}
if(!isfocus){
for (var index = 0; index < FormName.elements.length; index++) {
if(FormName.elements[index].className=='lc') continue;
if(FormName.elements[index].tagName=='INPUT'
|| FormName.elements[index].tagName=='SELECT'
|| FormName.elements[index].tagName=='TEXTAREA')
{
if(FormName.elements[index].type != "hidden"){

FormName.elements[index].focus();
break;
}
}
}

}
}

//清除文本框字符串的前后所有空格
String.prototype.trim = function() //removes the Left side and the right side blank space
{
return this.replace(/(^\s*)|(\s*$)/g, "")
}

//文本框获得焦点后,如果文本框不为空,则将焦点放置在字符串之后
function cc() //generater after onfocus()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}

//判断Form中所有对象的值中是否有特殊字符
function CheckSpecChar(FormName){
//传入参数为form的名称
bString = "'<>\""; //非法字符集
for (var ObjID=0; ObjID < FormName.elements.length; ObjID++) {
for(i = 0; i < FormName.elements[ObjID].value.length; i ++){
if (bString.indexOf(FormName.elements[ObjID].value.substring(i,i+1)) >= 0){
alert('输入的内容不能包含非法字符:' + bString);
FormName.elements[ObjID].focus();
return false;
}
}
}
return true;
}

//校验不合格后,光标自动定位到不符合格式要求的控件中
function CheckInputValue(input_desc,//输入框内容的中文名称
ObjName ,//输入框对象名称
is_empty,//false-不可以为空;true-可以为空
input_type,//输入框内容类型
input_minlength,//输入框内容的最小长度
input_maxlength//输入框内容的最长长度
){

//不能为空
if(!is_empty && CheckIsNull(ObjName.value)){
alert(input_desc + "不能为空!");
ObjName.value="";//liuchuang补充于20080619:输入空格后,将空格清除!
ObjName.focus();
return false;
}
if(is_empty && CheckIsNull(ObjName.value)){
return true;
}
//输入框内容的最小长度限制,并且输入框不为空,(剔除输入框为空的情况)
if(input_minlength != 0 && ObjName.value.length < input_minlength && ObjName.value.length > 0){
alert(input_desc + "长度不能低于" + input_minlength + "个字符!");
ObjName.focus();
return false;
}

if(input_maxlength != 0 && ObjName.value.length > input_maxlength ){
alert(input_desc + "长度不能超过" + input_maxlength + "个字符!");
ObjName.focus();
return false;
}

/***************
* 统一调用函数CheckSpecChar(FormName),整个form一次检查
* ***************/
/*
if(input_type == "String"){
if(!CheckString(ObjName.value)){
alert(input_desc + "不能包含<、>、'、\"、/、\\");
ObjName.focus();
return false;
}
}*/
if(input_type == "StringNoError"){
if(!CheckStringNoError(ObjName.value)){
alert(input_desc + "不能包含<、>、'、\"、/、\\");
ObjName.focus();
return false;
}
}

if(input_type == "StringNoSpace"){
if(!CheckStringNoSpace(ObjName.value)){
alert(input_desc + "不能包含空格!");
ObjName.focus();
return false;
}
}

if(input_type == "StringNo6up"){
if(!CheckStringNo6up(ObjName.value)){
alert(input_desc + "不能包含\^!");
ObjName.focus();
return false;
}
}

if(input_type == "StringNofg"){
if(!CheckStringNofg(ObjName.value)){
alert(input_desc + "不能包含※!");
ObjName.focus();
return false;
}
}

if(input_type == "StringNoPercent"){
if(!CheckStringNoPercent(ObjName.value)){
alert(input_desc + "不能包含%!");
ObjName.focus();
return false;
}
}

if(input_type == "StringNoSpacePercent"){
if(!CheckStringNoSpacePercent(ObjName.value)){
alert(input_desc + "不能包含空格和%!");
ObjName.focus();
return false;
}
}

if(input_type == "Number"){
if(!CheckNumber(ObjName.value)){
alert(input_desc + "是数字,只能全部由数字组成!");
ObjName.focus();
return false;
}
}

if(input_type == "Number24"){
if(!CheckNumber24(ObjName.value)){
alert(input_desc + ",只能在1-24之间!");
ObjName.focus();
return false;
}
}

if(input_type == "Telephone"){
if(!CheckTelephone(ObjName.value)){
//alert(input_desc + "是电话号码数字、-组成!");
alert(input_desc + "只能由数字、-组成!");
ObjName.focus();
return false;
}
}

if(input_type == "Money"){
if(!CheckMoney(ObjName.value)){
alert(input_desc + "是金额,由数字、.组成!");
ObjName.focus();
return false;
}
}
if(input_type == "Rate"){
if(!CheckRate(ObjName.value)){
alert(input_desc + "是系数,不能大于1!");
ObjName.focus();
return false;
}
}
if(input_type == "Time"){
if(!CheckTime(ObjName.value)){
alert(input_desc + "是时间,格式如下24h:mi!");
ObjName.focus();
return false;
}
}
if(input_type == "Time2"){
if(!CheckTime2(ObjName.value)){
alert(input_desc + "是时间,格式如下24h:mi:ss!");
ObjName.focus();
return false;
}
}
if(input_type == "Date"){
if(!CheckDate(ObjName,input_desc)){
return false;
}
}
if(input_type == "Month"){
if(!CheckMonth(ObjName.value)){
alert(input_desc + "是月份,格式如下yyyy-MM!");
ObjName.focus();
return false;
}
}
if(input_type == "Email"){
if(!CheckEmail(ObjName.value)){
alert(input_desc + "是Email,必须符合格式要求!");
ObjName.focus();
return false;
}
}

if(input_type == "Password"){
if(!CheckPassword(ObjName.value)){
alert(input_desc + "只能包含数字和字母!");
ObjName.focus();
return false;
}
}

if(input_type == "Letter"){
if(!CheckLetter(ObjName.value)){
alert(input_desc + "必须是字母!");
ObjName.focus();
return false;
}
}

if(input_type == "UpLetter"){
if(!CheckUpLetter(ObjName.value)){
alert(input_desc + "必须是大写字母!");
ObjName.focus();
return false;
}
}

if(input_type == "LowLetter"){
if(!CheckLowLetter(ObjName.value)){
alert(input_desc + "必须是小写字母!");
ObjName.focus();
return false;
}
}

if(input_type == "Chinese"){
if(!CheckChinese(ObjName.value)){
alert(input_desc + "必须是全部为中文!");
ObjName.focus();
return false;
}
}
if(input_type == "NoChinese"){
if(!CheckNoChinese(ObjName.value)){
alert(input_desc + "不能包含中文!");
ObjName.focus();
return false;
}
}
return true;
}

//判断控件中字符串是否为空
//By ChengWei 2007-12-12
function CheckIsNull(str) {
if (str.Trim().length == 0) {
return true; //空值
}
return false; //不为空
}
//判断是否没有包含空格
function CheckStringNoSpace(str){
var i;
for (i = 0; i < str.length; i++){
if (str.charAt(i) == " "){
return false;
}
}
return true;
}
//判断是否没有包含"/","\"
function CheckStringNoError(str){
//传入参数为form的名称
bString = "'<>\"\\/"; //非法字符集

for(i = 0; i < str.length; i ++){
if (bString.indexOf(str.substring(i,i+1)) >= 0){
return false;
}
}
return true;
}
//判断是否没有包含%
function CheckStringNoPercent(str){
var i;
for (i = 0; i < str.length; i++){
if (str.charAt(i) == "%"){
return false;
}
}
return true;
}

//判断是否没有包含\^
function CheckStringNo6up(str){
var i;
for (i = 0; i < str.length; i++){
if (str.charAt(i) == "\^"){
return false;
}
}
return true;
}

//判断是否没有包含\*
function CheckStringNofg(str){
var i;
for (i = 0; i < str.length; i++){
if (str.charAt(i) == "※"){
return false;
}
}
return true;
}

//判断是否没有空格和%
function CheckStringNoSpacePercent(str){
var i;
for (i = 0; i < str.length; i++){
if (str.charAt(i) == " " || str.charAt(i) == "%"){
return false;
}
}
return true;
}
//检验是否为数字(整型)
function CheckNumber(str){
var i;
//alert(parseInt(str));
for (i = 0; i < str.length; i++){
if (str.charAt(i) < "0" || str.charAt(i) > "9"){
return false;
}
}
return true;
}

//检验24小时范围
function CheckNumber24(str){
var i;
//alert(parseInt(str));
for (i = 0; i < str.length; i++){
if (str.charAt(i) < "0" || str.charAt(i) > "9"){
return false;
}
}
if(parseInt(str)<1||parseInt(str)>24){
return false;
}
return true;
}

//判断是否符合电话号码,Telephone,由数字和-组成
function CheckTelephone(str){
var i
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && str.charAt(i) != "-"){
return false;
}
}
return true;
}
//检验是否为金额(浮点)
function CheckMoney(str){
var i;
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && str.charAt(i) != "."){
return false;
}
}
return true;
}
//检验是否为系数,小于等于1
function CheckRate(str){
var i;
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && str.charAt(i) != "."){
return false;
}
}
if (parseFloat(str) >1 ){
return false;
}
return true;
}

//检验是否为时间,格式24h:mi
function CheckTime(str){
var i;
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && str.charAt(i) != ":"){
return false;
}
}
if (str.length != 5)
return false;
if (str.substring(2,3) != ":" ) {
return false;
}
ls_hour = str.substring(0,2);
ls_min = str.substring(3,5);

if (parseFloat(ls_hour) > 23 ){
return false;
}
if (parseFloat(ls_min) > 59){
return false;
}
return true;
}
//检验是否为时间,格式24h:mi:ss
function CheckTime2(str){
var i;
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && str.charAt(i) != ":"){
return false;
}
}
if (str.length != 8)
return false;
if (str.substring(2,3) != ":" ) {
return false;
}
if (str.substring(5,6) != ":" ) {
return false;
}
ls_hour = str.substring(0,2);
ls_min = str.substring(3,5);
ls_ss = str.substring(6,8);

if (parseFloat(ls_hour) > 23 ){
return false;
}
if (parseFloat(ls_min) > 59){
return false;
}
if (parseFloat(ls_ss) > 59){
return false;
}
return true;
}
//检验是否为月份,格式yyyy-MM
function CheckMonth(str){
var i;
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && str.charAt(i) != "-"){
return false;
}
}
if (str.length != 7)
return false;
if (str.substring(4,5) != "-" ) {
return false;
}
ls_year = str.substring(0,4);
ls_month = str.substring(5,7);

if (parseFloat(ls_year) < 1900 ){
return false;
}
if (parseFloat(ls_month) > 12){
return false;
}
return true;
}

//判断控件中输入是否都为yyyy-mm-dd格式的日期,
function CheckDate(ObjName,ObjDesc) {

var ln = ObjName.value.length;
//空值看作符合格式要求
if (ln == 0 ) {
return true;
}
if (ln != 10) {
alert( ObjDesc + "只能输入如下日期格式yyyy-mm-dd!");
ObjName.focus();
return false;
}
bString = "0123456789-";
for(i = 0; i < ObjName.value.length; i ++){
if (bString.indexOf(ObjName.value.substring(i,i+1)) == -1) {
alert(ObjDesc + "日期格式只能输入数字和-!");
ObjName.focus();
return false;
}
}

var ls_year, ls_date, ls_month;

if (ObjName.value.substring(4,5) != "-" || ObjName.value.substring(7,8) != "-") {
alert(ObjDesc + "只能输入如下日期格式yyyy-mm-dd!");
ObjName.focus();
return false;
}
ls_year = ObjName.value.substring(0,4);
ls_month = ObjName.value.substring(5,7);
ls_date = ObjName.value.substring(8,10);

if (parseFloat(ls_year) > 2100 || parseFloat(ls_year) < 1900){
alert( ObjDesc + "年份不对!");
ObjName.focus();
return false;
}
if (parseFloat(ls_month) > 12 || parseFloat(ls_year) < 1){
alert(ObjDesc + "月份不对!");
return false;
}
if (parseFloat(ls_date) > 31 || parseFloat(ls_date) < 1){
alert(ObjDesc + "日期不对!");
ObjName.focus();
return false;
}
return true;
}
//判断是否符合Password格式,字母和数字组合
function CheckPassword(str){
var i
for (i = 0; i < str.length; i++){
if ((str.charAt(i) < "0" || str.charAt(i) > "9") && (str.charAt(i) < "A" || str.charAt(i) > "Z") && (str.charAt(i) < "a" || str.charAt(i) > "z")){
return false;
}
}
return true;
}
//判断是否都是字母
function CheckLetter(str){
var i
for (i = 0; i < str.length; i++){
if ( (str.charAt(i) < "A" || str.charAt(i) > "Z") && (str.charAt(i) < "a" || str.charAt(i) > "z")){
return false;
}
}
return true;
}
//判断是否都是大写字母
function CheckUpLetter(str){
var i
for (i = 0; i < str.length; i++){
if ( (str.charAt(i) < "A" || str.charAt(i) > "Z") ){
return false;
}
}
return true;
}
//判断是否都是小写字母
function CheckLowLetter(str){
var i
for (i = 0; i < str.length; i++){
if ( (str.charAt(i) < "a" || str.charAt(i) > "z")){
return false;
}
}
return true;
}

//判断是否为全部中文,当然在其他语言的系统中,如果是日文、韩文也可能,
function CheckChinese(str){
var i ;
for (var i=0;i<str.length;i++){
if (parseInt(str.charCodeAt(i)) <= 256){
return false;
}
}
return true;
}
//判断是否没有中文
function CheckNoChinese(str){
var i ;
for (var i=0;i<str.length;i++){
if (parseInt(str.charCodeAt(i)) > 256){
return false;
}
}
return true;
}

//判断是否符合Email的格式,包含@和. , @在.之前,
function CheckEmail(str){
var index_i;
var index_j;
if(str.length > 0){
index_i = str.lastIndexOf("@");

if(( index_i < 1) ){
return false;
}
index_j = str.indexOf(".", index_i);
if(( index_j < 1) ){
return false;
}

}
return true;
}

//去空格函数
String.prototype.Trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.LTrim = function() {
return this.replace(/(^\s*)/g, "");
}

String.prototype.RTrim = function() {
return this.replace(/(\s*$)/g, "");
}

//****************************************************************
// Description: str 为输入字符串,
// iType为类型,分别为0 - 去除前后空格; 1 - 去前导空格; 2 - 去尾部空格
//****************************************************************
function cTrim(str,iType){
var sTmpStr = ' ';
var i = -1;

if(iType == 0 || iType == 1){
while(sTmpStr == ' '){
++i;
sTmpStr = str.substr(i,1);
}
str = str.substring(i);
}

if(iType == 0 || iType == 2){
sTmpStr = ' ';
i = str.length;
while(sTmpStr == ' '){
--i;
sTmpStr = str.substr(i,1);
}
str = str.substring(0,i+1);
}
return str;
}

function isblank(s)
{
var j=0;
for(var i = 0;i < s.length;i++) {
var c = s.charAt(i);
if ((c != '') && (c != '\n') && (c != '\t') && (c != ' ')) return false;
if (c == ' ')
{
j++;
}
}
if (j == s.length) //全部是空格
{
return true;
}
else
{
return false;
}
}

function isvalid(s)
{
var j=0;
for(var i = 0;i < s.length;i++) {
var c = s.charAt(i);
if ((c == '<') || (c == '>') || (c == '\\') || (c == '/') || (c == '+') || (c == '\'')) return false;
}
return true;
}

function isNum(s)
{
for(var i = 0;i < s.length;i++) {
var v = parseFloat(s.charAt(i));
if (isNaN(v)) return false;
}
return true;
}

//拼音,数字,|组成
function CheckInputStringExt1(inputDesc,obj,isEmpty,minLength,maxLength){
var value = obj.value.Trim();
var str = /^[a-zA-Z\d|]*?$/;
if(!isEmpty && value.length > 0){
alert(inputDesc + "不能为空!");
obj.focus();
return false;
}
if(!str.exec(value)){
alert(inputDesc + "只能包含数字,字母和\"|\"!");
obj.focus();
return false;
}
if(value.length > maxLength){
alert(inputDesc + "长度不能超过" + maxLength + "个字符!");
obj.focus();
return false;
}
return true;
}

 
分享到:
评论

相关推荐

    基于avalon225js封装了几个常用组件

    标题中的"基于avalon2.2.5js封装了几个常用组件"意味着开发者已经对Avalon.js进行了二次开发,创建了一些便于日常使用的组件。Avalon.js 2.2.5是一个成熟的版本,它提供了一套数据绑定机制,简化了DOM操作,使得...

    js一些小功能

    JavaScript,简称JS,是一种广泛用于网页和网络应用的编程语言,具有轻量级、动态、弱类型等特性。在这个“js一些小功能”的压缩包中,我们...通过学习和借鉴这些代码,我们可以更好地理解和掌握JavaScript的日常应用。

    这个万能js

    【万能js】,顾名思义,是一个包含多种实用JavaScript功能的集合,可能是为了方便开发者在日常工作中快速调用和复用。JavaScript是一种广泛应用于Web开发的编程语言,尤其在前端开发中扮演着核心角色。它使得网页...

    taotao商城后台管理系统静态页面

    这可能是文件夹或者压缩包内的一个主要部分,里面可能包含了所有与淘淘商城后台管理系统相关的静态资源,如HTML文件(页面结构)、CSS文件(样式表)、JS文件(脚本)、图片资源(图标、背景图等)以及可能的字体...

    javaweb办公室日常管理信息系统

    JavaBean则作为业务逻辑的封装对象,便于复用和维护。 二、系统架构 该“javaweb办公室日常管理信息系统”可能采用MVC(Model-View-Controller)设计模式,将业务逻辑、数据模型和用户界面分离,提高代码的可读性...

    程序员常用的js代码

    本资源“程序员常用的js代码”显然是一份集合了众多实用JavaScript代码片段的资料,旨在帮助程序员提升开发效率,解决日常编程问题。其中包含的“程序员常用JavaScript特效 301119.chm”文件,很可能是一个帮助文档...

    常用js实例

    在“常用js实例”这个压缩包中,我们可以期待找到一系列已经编写好的JavaScript代码片段,这些实例可能涵盖了日常开发中的各种常见需求,方便开发者进行二次开发,快速实现特定功能。 首先,让我们探讨一下...

    200个站长常用JS代码

    "200个站长常用JS代码"这个压缩包文件集合了众多站长在日常工作中可能会用到的JavaScript代码片段,对于提升网站功能、优化用户体验非常有帮助。 1. **DOM操作**:JavaScript能够操作Document Object Model(DOM)...

    JS日历便利贴.rar

    《JS日历便利贴》是一款基于JavaScript技术实现的电子日历应用,旨在为用户提供便捷的日程管理和备忘录功能。在Web开发领域,JavaScript作为客户端脚本语言,扮演着重要的角色,它使得网页具有交互性,使用户可以与...

    60个常用js

    这个压缩包“60个常用js”显然是一个包含多个JavaScript实用代码片段或者函数库的集合,旨在帮助开发者在日常工作中提高效率。 以下是一些可能包含在这个压缩包中的JavaScript知识点: 1. **变量声明与数据类型**...

    基于javaee+servlet+js+html实现外卖点餐系统.zip

    在这个外卖点餐系统中,JS被用来处理用户输入、实现动态加载和更新页面内容,以及进行客户端的验证。例如,用户在选择菜品时,JS可以实时计算总价并显示在页面上;在提交订单前,可以验证用户输入的有效性,减少...

    试用范例struts1.+jquery验证

    jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理以及AJAX交互,使得前端开发更加便捷。 首先,让我们详细了解一下Struts1框架。Struts1是Apache软件基金会下的一个开源项目,它的核心设计目标是提供...

    vue axios基于常见业务场景的二次封装的实现

    Axios是一个流行的JavaScript库,用于在浏览器和Node.js环境中进行HTTP请求。它支持Promise API,提供了丰富的拦截器机制,可以方便地处理请求和响应,同时具有良好的性能和易用性。 2. **二次封装的目的**: - *...

    非常漂亮的css+table+js BS模板

    4. **JavaScript和jQuery**:可能涉及到动态效果和用户交互,如表单验证、下拉菜单、模态框等,这些都需要JavaScript和Bootstrap的JS插件实现。 5. **响应式设计**:由于是移动优先的设计,模板应能在不同设备上...

    站长常用的200个js代码

    "站长常用的200个js代码"集合可能是为了帮助网站管理员、开发者和站长解决日常工作中遇到的各种问题,提升工作效率而整理的实用代码片段。 1. **DOM操作**:JavaScript通过Document Object Model (DOM) API可以动态...

    100个可以直接拿来用的javaScript代码

    JavaScript,简称JS,是一种广泛应用于Web开发的轻量级编程语言,主要负责处理网页的动态效果和用户交互。本文将围绕“100个可以直接拿来用的JavaScript代码”这一主题,详细阐述其中可能涵盖的常见JavaScript知识点...

    JS.CSS代码工具

    这个工具包主要包含了JavaScript(JS)和层叠样式表(CSS)的相关代码示例,为初学者提供了一个快速学习和参考的平台。 **JavaScript基础知识** JavaScript是一种轻量级的解释型编程语言,主要用于客户端的网页...

    图书馆管理系统.rar

    2. **JS**:JavaScript是前端编程语言,负责处理用户交互、表单验证等功能,增强页面的动态性。在这个系统中,JavaScript可能用于实现登录验证、页面跳转、数据校验等功能。 3. **image**:图像文件,用于美化系统...

    ASP.NET C#实现《个体工商户日常管理网站》

    10. **用户体验优化**:项目可能使用CSS和JavaScript进行页面样式和交互的优化,提升用户体验。AJAX技术可能也被用来实现部分页面的异步更新,提高响应速度。 这个《个体工商户日常管理网站》项目涵盖了从数据库...

Global site tag (gtag.js) - Google Analytics