前端编程提高之旅(十七)----jquery中表单、表格和ajax

本文主要是介绍前端编程提高之旅(十七)----jquery中表单、表格和ajax,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 从一个框架核心功能层面上说,实现了选择器、DOM操作、事件、动画,功能已经完备了。而任何框架写出了就是应用的,所以这篇涉及的表单与表格知识,虽在DOM操作中有所涉及,但更偏于实际项目中的应用技巧的使用。ajax部分的内容更是前端与后端交互的核心。

   一、jQuery中的表单与表格应用

   实际项目中,表单和表格分别扮演采集、提交用户输入的信息和显示列表的数据。在HTML中非常重要。下面是这部分知识导图:


   1.表单

   (1)单行文本框

    单行文本框职能是获取用户输入的指定格式的数据。这就涉及两点交互。


    这两点交互都体现在获取焦点与失去焦点的变化上,当获取焦点时,单选框添加背景色、内容提示清空。失去焦点时,背景色去除,如果内容为空,内容提示恢复。

   jQuery代码如下:

[javascript]  view plain copy
  1. $(":input").focus(function(){  
  2.               $(this).addClass("focus");  
  3.               if($(this).val() ==this.defaultValue){    
  4.                   $(this).val("");             
  5.               }   
  6.         }).blur(function(){  
  7.              $(this).removeClass("focus");  
  8.              if ($(this).val() == '') {  
  9.                 $(this).val(this.defaultValue);  
  10.              }  
  11.         });  

      (2)多行文本框

   多行文本框一个比较重要的应用是控制滚动条的变化。如果有上滑的命令,则对文本框滚动条上移50px。反之亦然。

   jQuery代码如下:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var $comment = $('#comment');//获取评论框  
  2.         $('.up').click(function(){ //向上按钮绑定单击事件  
  3.            if(!$comment.is(":animated")){//判断是否处于动画  
  4.                 $comment.animate({ scrollTop  : "-=50" } , 400);  
  5.             }  
  6.         })  
  7.         $('.down').click(function(){//向下按钮绑定单击事件  
  8.            if(!$comment.is(":animated")){  
  9.                 $comment.animate({ scrollTop  : "+=50" } , 400);  
  10.             }  
  11.         });  

       (3)复选框应用

   复选框对于用户文件管理非常重要,主要涉及三个功能:全选、全不选、反选。此三个功能都会涉及修改每个复选框checked属性。

   实现如上三个功能代码如下:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $("#CheckedAll").click(function(){  
  2.          $('[name=items]:checkbox').each(function(){  
  3.             this.checked = true;  
  4.          })  
  5.      });  
  6.      //全不选  
  7.      $("#CheckedNo").click(function(){  
  8.         $('[name=items]:checkbox').each(function(){  
  9.             this.checked=false;  
  10.         });  
  11.      });  
  12.      //反选  
  13.      $("#CheckedRev").click(function(){  
  14.           $('[name=items]:checkbox').each(function(){     
  15.             //直接使用JS原生代码,简单实用  
  16.             this.checked=!this.checked;  
  17.           });  

      实现上述功能仅仅是第一步,常见的全选/全不选是一个按钮,当列表选项全选时,全选又必须选中。所以全选与列表项存在着双向通信。体现在代码中,就必须做到双向控制:即除了对自身状态的修改,还需要判断是否需要修改另一个的状态。

   如下代码采用一个临时变量记录,判断是否全选中:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //全选  
  2.         $("#CheckedAll").click(function() {  
  3.             //所有checkbox跟着全选的checkbox走。  
  4.             var self =this;  
  5.             $('[name=items]:checkbox').each(function(){  
  6.                 this.checked=self.checked;  
  7.             });  
  8.         });  
  9.         $('[name=items]:checkbox').click(function() {  
  10.             //定义一个临时变量,避免重复使用同一个选择器选择页面中的元素,提升程序效率。  
  11.             var $tmp = $('[name=items]:checkbox');  
  12.             //用filter方法筛选出选中的复选框。并直接给CheckedAll赋值。  
  13.             $('#CheckedAll').attr('checked', $tmp.length == $tmp.filter(':checked').length);  
  14.         });  

       (4)下拉框应用

   下拉框的应用主要集中于两栏之间,下拉项在下拉框之前切换,主要涉及option标签selected属性用来筛选选中项,另外涉及dom移动。主要涉及移动选中、全部移动、双击移动。注意双击移动采用了上下文筛选移动项。

   代码如下:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $('#add').click(function() {  
  2.     //获取选中的选项,删除并追加给对方  
  3.         $('#select1 option:selected').appendTo('#select2');  
  4.     });  
  5.     $('#add_all').click(function() {  
  6.         //获取全部的选项,删除并追加给对方  
  7.         $('#select1 option').appendTo('#select2');  
  8.     });  
  9.     $('#select1').dblclick(function(){ //绑定双击事件  
  10.         //获取全部的选项,删除并追加给对方  
  11.         $("option:selected",this).appendTo('#select2'); //追加给对方  
  12.     });  

      (5)表单验证

   表单验证最为常见,需要对用户输入信息实时提示,这里采用失去焦点判断的方法,为了实时显示,同时在keyup和focus事件中,都触发blur方法,同时避免浏览器默认blur事件。

   代码如下:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $('form :input').blur(function(){  
  2.          var $parent = $(this).parent();  
  3.          $parent.find(".formtips").remove();  
  4.          //验证用户名  
  5.          if( $(this).is('#username') ){  
  6.                 ifthis.value=="" || this.value.length < 6 ){  
  7.                     var errorMsg = '请输入至少6位的用户名.';  
  8.                        $parent.append('<span class="formtips onError">'+errorMsg+'</span>');  
  9.                 }else{  
  10.                     var okMsg = '输入正确.';  
  11.                     $parent.append('<span class="formtips onSuccess">'+okMsg+'</span>');  
  12.                 }  
  13.          }  
  14.          //验证邮件  
  15.          if( $(this).is('#email') ){  
  16.             ifthis.value=="" || ( this.value!="" && !/.+@.+\.[a-zA-Z]{2,4}$/.test(this.value) ) ){  
  17.                      var errorMsg = '请输入正确的E-Mail地址.';  
  18.                   $parent.append('<span class="formtips onError">'+errorMsg+'</span>');  
  19.             }else{  
  20.                      var okMsg = '输入正确.';  
  21.                   $parent.append('<span class="formtips onSuccess">'+okMsg+'</span>');  
  22.             }  
  23.          }  
  24.     }).keyup(function(){  
  25.        $(this).triggerHandler("blur");  
  26.     }).focus(function(){  
  27.        $(this).triggerHandler("blur");  
  28.     });//end blur  

             2.表格

   (1)展开关闭

    表格的展开关闭,也即展开关闭两种状态的切换,前面动画讲过toggle方法可以切换显示隐藏,这里通过点选控制同类兄弟节点的关闭显示切换。

   代码如下:

   

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $('tr.parent').click(function(){   // 获取所谓的父行  
  2.             $(this)  
  3.                 .toggleClass("selected")   // 添加/删除高亮  
  4.                 .siblings('.child_'+this.id).toggle();  // 隐藏/显示所谓的子行  
  5.     }).click();  

   (2)内容筛选

    对于列表的内容筛选,主要采用过滤方法filter,筛选包含指定内容的列表项。当keyup时即筛选。

    代码如下:

   

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $("#filterName").keyup(function(){  
  2.           $("table tbody tr")  
  3.                     .hide()  
  4.                     .filter(":contains('"+( $(this).val() )+"')")  
  5.                     .show();  
  6.        }).keyup();  

   二.jquery与ajax

   Ajax出现最大的意义在于,改变了以往前后端传数据需要全页面刷新来获取页面内容的方式,可以局部刷新页面。工作原理是在客户端实现了一个ajax引擎,使用户操作与服务器响应异步化。

   《jQuery攻略》上列出了ajax几大不足,但这似乎并没有影响ajax的广泛应用。作为前端开发人员,ajax带来的最大弊病就是异步响应的问题。异步响应需要开发人员时刻保持对时序执行逻辑的关注,往往很多问题都处在这里。

   jQuery提供了非常简便的ajax操作,代替了原生代码复杂冗余的操作,使ajax应用变得简单。以下是乐帝对ajax这部分内容的知识导图:


    1. ajax操作方法

    如上知识所示,ajax操作方法可以分为三层,由简单到复杂,由高层到底层。其中第二层最常用。这几个ajax方法底层都是对原生ajax方法的封装。但应用场景稍有不同,越是上层应用场景越具针对性,灵活性则不足。最底层$.ajax()灵活性虽足,配置起来则更为复杂。

   每个ajax操作方法都会涉及的参数有3个url(请求地址)、data(发送至服务器数据)、callback(请求完成时回调)。

   最常用的两个分别是$.get()与$.post(),两者分别对应ajax操作的get请求方式与post请求方式,这两种方式区别有三点:


   $.getScript()与$.getJSON()两个ajax方法分别是针对动态加载脚本与json文件场景设定的方法。

   $.ajax()方法是上述ajax操作方法最底层的构建,此方法可以替代上述方法。

   2.参数序列化方法

   本文第一部分提到表单是获取用户数据的方式,用户填写完表单,发送到服务器就需要收集用户表单数据。如果一个个取数据还是很繁琐的。

   参数序列化方法正是自动将表单数据序列化,用于ajax请求。

   serialize()用于将DOM元素内容序列化为字符串:


        serializeArray()用于将DOM元素序列化,返回JSON格式数据:


        $.param()方法用来对数组或对象键值对序列化:


   3.ajax请求控制方法

   这里主要涉及两个方法:Ajax请求开始时,会触发ajaxStart方法;Ajax请求结束时,会触发ajaxStop方法。常用于加强用户体验,给用户添加加载提示。

   使用示例:

[javascript]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $("#send").click(function(){  
  2.               $("#resText").load("test.html");  
  3.       })  
  4.       $("#resText").ajaxStart(function(){  
  5.         console.log("ajax has started");  
  6.       });  
  7.       $("#resText").ajaxStop(function(){  
  8.         console.log("ajax has stopped");  
  9.       });  

这篇关于前端编程提高之旅(十七)----jquery中表单、表格和ajax的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973424

相关文章

防止页面url缓存中 ajax中post 请求的处理方式

一般我们在开发中经常会用到Ajax请求,异步发送请求,然后获取我们想要的数据,在Ajax中使用Get请求数据不会有页面缓存的问题,而使用POST请求可是有时候页面会缓存我们提交的信息,导致我们发送的异步请求不能正确的返回我们想要的数据,那么遇到这种情况,我们应该怎么办呢???     下面介绍一种方式来防止ajax中post 请求 页面缓存 url 信息: $.post(url,d

Jquery 实现表单提交按钮变灰,防止多次点击提交重复数据

表单提交时候我们应该控制提交按钮,不能点击多次进行数据的重复提交。要不然就会有冗余的重复的数据在系统中,造成系统出现数据垃圾。jQuery很简单的就可以实现对表单提交按钮控制,下面就是相关的例子和代码。 <form action="${pageContext.servletContext.contextPath}/XXX/###" method="post" id="messag

java 通过Ajax前台传参数 并用 HttpURLConnection Post方式访问对外的接口

前两天做项目遇到一个问题,就是在自己的项目中要去访问项目外部的接口,从自己的项目中传参数过去,通过调用 对方提供的接口去获取想要得到的数据!第一次接触到在自己项目中去访问和调用外部的资源,然后在网上去找资料,看有没有相关的资料可以参考,然后通过参考其他人的博客资料,最终把这个问题解决了。自己总结一下这个过程,也供遇到相同或者类似问题的朋友可以快速的定位和解决问题。      下面讲一下我

【一】并发编程故事背景介绍

背景 每一个故事都有一个开始,那么并发编程的故事的开始是什么呢? 由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。 多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!在

不就是Java编程嘛,来来来

点击上方☝Java编程技术乐园,轻松关注! 及时获取有趣有料的技术文章 做一个积极的人编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开!                             不就是Java编程嘛 当我写下第一行代码的时候 我觉得它很有趣 当我写下第一百行代码的时候 我觉得它很善良 抛出了异常而且还告

2019年长沙前端技术分享大会圆满成功

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开! 本文首发: 唐胡子俱乐部,授权发布! 摘要 长沙百名互联网前端程序员齐聚长沙互联网活动基地(唐胡子俱乐部)。 主办单位:唐胡子俱乐部 支持单位:芒果TV,拓维,湘邮,58到家,御泥坊,兴盛优选,中软国际,长海科技,长沙联通 时 间:2019年5月19日 ----------------------

vue3显示element-plus所有icon

效果 代码 <template><div style="display: flex;flex-wrap: wrap"><component :is="name" style="width: 2rem; margin-left: 2rem" v-for="(name,index) in icons" :index="index" :key="index"></component></div>

bimface开发实战-vue版

效果 演示地址 框架 bimface + vue3.0 代码地址 gitee地址 使用 yarn install yarn serve

vue3.0 v-model 的使用

前言 组件功能:把 el-switch 的值 false/true, 动态绑定输出为 0, 1 组件代码 封装el-switch组件,当el-switch的值为false,输出值为0;当el-switch的值为true,输出值为1; <template><el-switch v-model="switchValue" @change="changeEvent"></el-switch

Vue学习笔记:拦截器

原文地址 Vue可以对http request和http response添加全局拦截,最典型的例子就是在请求头里添加token,和监测是否登录,如果没有登录则跳转到登录页面。 main.js中添加拦截器的代码: 1. request 拦截器 //request 拦截器,在请求头中加tokenaxios.interceptors.request.use(config => {if (lo