js自定义回调函数
背景分析
首先看一段js的代码,主要实现添加的时候首先通过异步请求判断是否存在,如果不存在的话,在进行添加操作:
functionadd(url,data){ varisExited=isExited(data); if(!isExited){ addRequest(url,data); } }
当我添加一个数据的时候,我首先通过判断是否在数据库中存在(当然,如果前后台彻底分离的话,不应该前端进行业务逻辑的判断,前端只应该,用来展示数据),首先,isExited()的请求是ajax请求实现,这个是异步的,很显然,界面很有可能在没有返回结果的时候,就执行下边的函数(通常情况下是的),就使得isExited的值是undefined,这显然不是想要的,如果要实现类似的功能可以使用用回调函数实现,下边介绍一个案例。
过程如下
前台jsp界面如下:
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%> <head> <metacharset="utf-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=device-width,initial-scale=1"> <title>JS回调函数案例</title> <!--Bootstrap--> <linkhref="<c:urlvalue='/lib/bootstrap/css/bootstrap.min.css'/>"rel="stylesheet"> <scripttype="text/javascript"> /** *删除的请求 */ functionsupplierDelete(element){ varid=element.parentNode.parentNode.cells[0].innerHTML; modalDeleteRequest('${pageContext.request.contextPath}/oms/supplier/remove/',id); } </script> </head> <body> <!--顶部导航--> <divclass="navbarnavbar-inversenavbar-fixed-top"role="navigation"id="menu-nav"> </div> <divclass="containerpartner-table-containertextFont"> <tableclass="tabletable-stripeddetailTableSet"> <caption><h2>JS回调函数案例</h2></caption> <br> <trclass="table-hoverform-horizontal"> <tdclass="info">123</td> <tdclass="info">123</td> <tdclass="info">123</td> <tdclass="info">123</td> <tdclass="info">123</td> </tr> <tr> <td>123</td> <td>123</td> <td>123</td> <td>123</td> <td>123</td> <td> <aonclick="supplierUpdate(this)">修改</a> <aonclick="supplierDelete(this)">删除</a> </td> </tr> </table> </div> <!--显示成功失败的modal--> <%@includefile="/modal-custom.jsp"%> <scriptsrc="<c:urlvalue='/lib/jquery-1.8.3.min.js'/>"></script> <scriptsrc="<c:urlvalue='/lib/bootstrap/js/bootstrap.min.js'/>"></script> <scripttype="text/javascript"src="<c:urlvalue='/js/modal-operate.js'/>"></script> </body> </html>
主要的js代码如下:
<scripttype="text/javascript"> /** *删除的请求 */ functionsupplierDelete(element){ varid=element.parentNode.parentNode.cells[0].innerHTML; modalDeleteRequest('${pageContext.request.contextPath}/oms/supplier/remove/',id); } </script>
这里就是当点击按钮的时候进行删除,但是我想弹出一个确认删除对话框,如果弹出之后选择的是确认之后,才调用具体的删除方法,还有这里边引用了一个modal框(bootstrap框架),主要是用于展示弹出框信息,代码如下:
<%@pagelanguage="java"pageEncoding="UTF-8"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%> <!--模态框(Modal)--> <divclass="modalfade"id="modal-result"tabindex="-1"role="dialog" aria-labelledby="myModalLabel"aria-hidden="true"> <divclass="modal-dialog"> <divclass="modal-content"> <divclass="modal-header"> <buttontype="button"class="close" data-dismiss="modal"aria-hidden="true"> × </button> <h4class="modal-title"id="myModalLabel"> 信息 </h4> </div> <divclass="modal-body"id="modal-add-result-text"> </div> <divclass="modal-footer"> <buttontype="button"class="btnbtn-default" data-dismiss="modal">关闭 </button> </div> </div> <!--/.modal-content--> </div> <!--/.modal--> </div>
下边是今天的主角:
/** *删除请求的操作 *@paramurl删除请求的url *@paramid删除的id */ functionmodalDeleteRequest(url,id){ confirmIsDelete(url,id,deleteRequest); } /** *在删除警告框确认之后调用的回调函数 *@paramurl *@paramid */ functiondeleteRequest(url,id){ $.get(url+id,function(result){ $("#modal-add-result-text").text(result.msg); $("#modal-result").modal('show'); },"json"); } /** *弹出对话框确认是否删除 *@paramurl删除请求的url *@paramid删除请求的id *@paramcallback回调函数,在最后的时候需要进行回调的函数 */ functionconfirmIsDelete(url,id,callback){ varconfirmDeleteDialog=$('<divclass="modalfade"><divclass="modal-dialog">' +'<divclass="modal-content"><divclass="modal-header"><buttontype="button"class="close"' +'data-dismiss="modal"aria-hidden="true">×</button>' +'<h4class="modal-title">确认删除</h4></div><divclass="modal-body">' +'<divclass="alertalert-warning">确认要删除吗?删除之后无法恢复哦!</div></div><divclass="modal-footer">' +'<buttontype="button"class="btnbtn-default"data-dismiss="modal">取消</button>' +'<buttontype="button"class="btnbtn-success"id="deleteOK">删除</button></div></div>' +'</div></div>'); confirmDeleteDialog.modal({ keyboard:false }).on({ 'hidden.bs.modal':function(){ $(this).remove(); } }); vardeleteConfirm=confirmDeleteDialog.find('#deleteOK'); deleteConfirm.on('click',function(){ confirmDeleteDialog.modal('hide');//隐藏dialog //需要回调的函数 callback(deleteRequest(url,id)); }); }
这里写图片描述
这里写图片描述
上边由于代码比较多,下边看一个简单的框架:
/** *回调函数测试方法 * *@paramcallback *回调的方法 */ functiontestCallback(callback){ alert('comein!'); callback(); } /** *被回调的函数 */ functiona(){ alert('a'); } /** *开始测试方法 */ functionstart(){ testCallback(a); }
到此回调结束,希望对大家学习有帮助,小编也对js自定义回调函数有了更深入的了解。