谈谈JavaScript自定义回调函数


Posted in Javascript onOctober 18, 2015

废话不多说了,直接给大家贴代码了。

背景分析

首先看一段js的代码,主要实现添加的时候首先通过异步请求判断是否存在,如果不存在的话,在进行添加操作:

function add(url,data) {
 var isExited = isExited(data); 
 if(!isExited){
  addRequest(url, data); 
 }
}

当我添加一个数据的时候,我首先通过判断是否在数据库中存在(当然,如果前后台彻底分离的话,不应该前端进行业务逻辑的判断,前端只应该,用来展示数据),首先,isExited()的请求是ajax请求实现,这个是异步的,很显然,界面很有可能在没有返回结果的时候,就执行下边的函数(通常情况下是的),就使得isExited的值是undefined,这显然不是想要的,如果要实现类似的功能可以使用用回调函数实现,下边介绍一个案例。

过程如下

前台jsp界面如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>JS回调函数案例</title>
 <!-- Bootstrap -->
 <link href="<c:url value='/lib/bootstrap/css/bootstrap.min.css'/>" rel="stylesheet">

 <script type="text/javascript">

  /**
   * 删除的请求
   */
  function supplierDelete(element) {
   var id = element.parentNode.parentNode.cells[0].innerHTML;
   modalDeleteRequest('${pageContext.request.contextPath}/oms/supplier/remove/', id);
  }
 </script>
</head>
<body>
<!-- 顶部导航 -->
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation" id="menu-nav">

</div>

<div class="container partner-table-container textFont">
 <table class="table table-striped detailTableSet">
  <caption><h2>JS回调函数案例</h2></caption>
  <br>
  <tr class="table-hover form-horizontal">
   <td class="info">123</td>
   <td class="info">123</td>
   <td class="info">123</td>
   <td class="info">123</td>
   <td class="info">123</td>
  </tr>
   <tr>
    <td>123</td>
    <td>123</td>
    <td>123</td>
    <td>123</td>
    <td>123</td>
    <td>
     <a onclick="supplierUpdate(this)">修改</a> 
     <a onclick="supplierDelete(this)">删除</a>
    </td>
   </tr>
 </table>
</div>

<!--显示成功失败的modal-->
<%@include file="/modal-custom.jsp" %>

<script src="<c:url value='/lib/jquery-1.8.3.min.js'/>"></script>
<script src="<c:url value='/lib/bootstrap/js/bootstrap.min.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/modal-operate.js'/>"></script>
</body>
</html>

主要的js代码如下:

<script type="text/javascript">

  /**
   * 删除的请求
   */
  function supplierDelete(element) {
   var id = element.parentNode.parentNode.cells[0].innerHTML;
   modalDeleteRequest('${pageContext.request.contextPath}/oms/supplier/remove/', id);
  }
 </script>

这里就是当点击按钮的时候进行删除,但是我想弹出一个确认删除对话框,如果弹出之后选择的是确认之后,才调用具体的删除方法,还有这里边引用了一个modal框(bootstrap框架),主要是用于展示弹出框信息,代码如下:

<%@ page language="java" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 模态框(Modal) -->
<div class="modal fade" id="modal-result" tabindex="-1" role="dialog"
  aria-labelledby="myModalLabel" aria-hidden="true">
 <div class="modal-dialog">
  <div class="modal-content">
   <div class="modal-header">
    <button type="button" class="close"
      data-dismiss="modal" aria-hidden="true">
     ×
    </button>
    <h4 class="modal-title" id="myModalLabel">
     信息
    </h4>
   </div>
   <div class="modal-body" id="modal-add-result-text">
   </div>
   <div class="modal-footer">
    <button type="button" class="btn btn-default"
      data-dismiss="modal">关闭
    </button>
   </div>
  </div>
  <!-- /.modal-content -->
 </div>
 <!-- /.modal -->
</div>

下边是今天的主角:

/**
 * 删除请求的操作
 * @param url 删除请求的url
 * @param id 删除的id
 */
function modalDeleteRequest(url, id) {
 confirmIsDelete(url, id, deleteRequest);
}
/**
 * 在删除警告框确认之后调用的回调函数
 * @param url
 * @param id
 */
function deleteRequest(url, id) {
 $.get(url + id, function (result) {
  $("#modal-add-result-text").text(result.msg);
  $("#modal-result").modal('show');
 }, "json");
}

/**
 * 弹出对话框确认是否删除
 * @param url 删除请求的url
 * @param id 删除请求的id
 * @param callback 回调函数,在最后的时候需要进行回调的函数
 */
function confirmIsDelete(url, id, callback) {
 var confirmDeleteDialog = $('<div class="modal fade"><div class="modal-dialog">'
  + '<div class="modal-content"><div class="modal-header"><button type="button" class="close" '
  + 'data-dismiss="modal" aria-hidden="true">×</button>'
  + '<h4 class="modal-title">确认删除</h4></div><div class="modal-body">'
  + '<div class="alert alert-warning">确认要删除吗?删除之后无法恢复哦!</div></div><div class="modal-footer">'
  + '<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>'
  + '<button type="button" class="btn btn-success" id="deleteOK">删除</button></div></div>'
  + '</div></div>');

 confirmDeleteDialog.modal({
  keyboard: false
 }).on({
  'hidden.bs.modal': function () {
   $(this).remove();
  }
 });

 var deleteConfirm = confirmDeleteDialog.find('#deleteOK');
 deleteConfirm.on('click', function () {
  confirmDeleteDialog.modal('hide'); //隐藏dialog
  //需要回调的函数
  callback(deleteRequest(url, id));
 });
}

谈谈JavaScript自定义回调函数

上边由于代码比较多,下边看一个简单的框架:

/**
 * 回调函数测试方法
 * 
 * @param callback
 * 回调的方法
 */
function testCallback(callback) {
 alert('come in!');
 callback();
}

/**
 * 被回调的函数
 */
function a() {
 alert('a');
}

/**
 * 开始测试方法
 */
function start() {
 testCallback(a);
}

以上内容是小编通过代码分析给大家介绍的js回调函数,希望大家喜欢。

Javascript 相关文章推荐
文本框的字数限制功能jquery插件
Nov 24 Javascript
JS格式化数字金额用逗号隔开保留两位小数
Oct 18 Javascript
如何在指定的地方插入html内容和文本内容
Dec 23 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
jquery实现的横向二级导航效果代码
Aug 26 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
Aug 01 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
RequireJS用法简单示例
Aug 20 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
JS实现的网页背景闪电闪烁效果代码
Oct 17 #Javascript
JavaScript实现点击按钮切换网页背景色的方法
Oct 17 #Javascript
JavaScript实现的背景自动变色代码
Oct 17 #Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
Oct 17 #Javascript
利用jQuery和CSS将背景图片拉伸
Oct 16 #Javascript
基于jQuery实现的菜单切换效果
Oct 16 #Javascript
javascript判断复选框是否选中的方法
Oct 16 #Javascript
You might like
上海无线电三厂简史修改版
2021/03/01 无线电
咖啡与牛奶
2021/03/03 冲泡冲煮
打造计数器DIY三步曲(中)
2006/10/09 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php实现文件预览功能
2017/05/23 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
offsetParent 算法分析
2010/04/05 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python易忽视知识点小结
2015/05/25 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
TensorFlow实现创建分类器
2018/02/06 Python
python Shapely使用指南详解
2020/02/18 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
PyQt5实现登录页面
2020/05/30 Python
python安装sklearn模块的方法详解
2020/11/28 Python
android面试问题与答案
2016/12/27 面试题
2014年党员公开承诺践诺书
2014/03/25 职场文书
协议书格式
2014/04/23 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
MySQL系列之十一 日志记录
2021/07/02 MySQL
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL