js自定义回调函数


Posted in Javascript onDecember 13, 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));
  });
}

这里写图片描述
这里写图片描述

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

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

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

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

到此回调结束,希望对大家学习有帮助,小编也对js自定义回调函数有了更深入的了解。

Javascript 相关文章推荐
jquery分页对象使用示例
Apr 01 Javascript
使用javascript实现监控视频播放并打印日志
Jan 05 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
Vue组件BootPage实现简单的分页功能
Sep 12 Javascript
JavaScript编写一个简易购物车功能
Sep 17 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
JQuery的加载和选择器用法简单示例
May 13 jQuery
Vue+Koa2+mongoose写一个像素绘板的实现方法
Sep 10 Javascript
ES6箭头函数和扩展实例分析
May 23 Javascript
Element Collapse 折叠面板的使用方法
Jul 26 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 #Javascript
分享Javascript实用方法二
Dec 13 #Javascript
JavaScript判断按钮被点击的方法
Dec 13 #Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 #Javascript
JavaScript代码判断点击第几个按钮
Dec 13 #Javascript
JavaScript模块化开发之SeaJS
Dec 13 #Javascript
node.js require() 源码解读
Dec 13 #Javascript
You might like
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
Python将string转换到float的实例方法
2019/07/29 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
土木工程毕业生自荐信
2013/11/12 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
销售业务员岗位职责
2015/02/13 职场文书
会计求职自荐信
2015/03/26 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python