jQuery插件扩展实例【添加回调函数】


Posted in Javascript onNovember 26, 2016

本文实例讲述了jQuery插件扩展的方法。分享给大家供大家参考,具体如下:

<script language="javascript" type="text/javascript">
function doSomething(callback) {
  // … 
  // Call the callback
  callback('stuff', 'goes', 'here'); // 给callback赋值,callback是个函数变量
}
function foo1(a, b, c) {
  // I'm the callback
  alert(a + " " + b + " " + c);
}
doSomething(foo1); // foo1函数将使用callback函数中的数据 stuff goes here
var foo2 = function(a,b,c) {
  // I'm the callback
  alert(a + " " + b + " " + c);
}
doSomething(foo2); // foo2函数将使用callback函数中的数据 stuff goes here
doSomething(function(a,b,c){
  alert(a + " " + b + " " + c); // function函数将使用callback函数中的数据 stuff goes here
});
</script>

callback这个参数必须是函数才有效。才能起到回调的作用。

<script language="javascript" type="text/javascript">
function doSomething(callback) {
  // … 
  // Call the callback
  if(typeof callback === 'function'){
    callback('stuff', 'goes', 'here'); // 给callback赋值,callback是个函数变量
  }else{
    alert('3water.com');
  }
}
function foo1(a, b, c) {
  // I'm the callback
  alert(a + " " + b + " " + c);
}
doSomething(foo1); // foo1函数将使用callback函数中的数据 stuff goes here
var foo2 = function(a,b,c) {
  // I'm the callback
  alert(a + " " + b + " " + c);
}
doSomething(foo2); // foo2函数将使用callback函数中的数据 stuff goes here
doSomething(function(a,b,c){
  alert(a + " " + b + " " + c); // function函数将使用callback函数中的数据 stuff goes here
});
var foo3 = 'a';
doSomething(foo3);
</script>

foo3不是函数的时候,弹出3water.com

jQuery实例

原函数

$.fn.citySelect=function(settings)

添加回调

$.fn.citySelect=function(settings, changeHandle) // 添加回调函数changeHandle

给回调函数赋值

//选项变动赋值事件
var selectChange = function (areaType) { 
  if(typeof changeHandle === 'function'){ // 判断callback是否是函数
    var prov_id = prov_obj.get(0).selectedIndex;
    var city_id = city_obj.get(0).selectedIndex;
    var dist_id = dist_obj.get(0).selectedIndex;
    if(!settings.required){
      prov_id--;
      city_id--;
      dist_id--;
    };
    if(dist_id<0){
      var data = {
        prov: city_json.citylist[prov_id].p,
        city: city_json.citylist[prov_id].c[city_id].n,
        dist: null
      };
    }else{
      var data = {
        prov: city_json.citylist[prov_id].p,
        city: city_json.citylist[prov_id].c[city_id].n,
        dist: city_json.citylist[prov_id].c[city_id].a[dist_id].s
      };
    }
    changeHandle(data, areaType); // 返回两个处理好的数据
  }
};

获取省市县数据data以及触发的change事件类型areaType

// 选择省份时发生事件
prov_obj.bind("change",function(){
    cityStart();
    selectChange('prov'); // 返回数据
});
// 选择市级时发生事件
city_obj.bind("change",function(){
    distStart();
    selectChange('city'); // 返回数据
});
// 选择区级时发生事件
dist_obj.bind("change",function(){
    selectChange('dist'); // 返回数据
});

在各个事件中执行

前端使用

$("#s_city").citySelect({
  prov: "江苏省",
  city: "宿迁市",
  dist: "宿城区",
  nodata: "none"
},
function(data, type) {
  selectAgent(data.city, data.dist);
});

使用回调回来的data数据,用于selectAgent函数中

function selectAgent(city,district){
    $.ajax({
      type:"POST",
      url:"{sh::U('Index/ajax',array('todo'=>'getagent'))}",
      data:"city="+city+"&district="+district,
      success:function(json){
        json = JSON.parse(json);
        opt_str = "<option value=''>-请选择-</option>"
        if(json.status == 1){
          $.each(json.data,function(index,con){
            opt_str += "<option value="+con.id+">"+con.name+" 电话:"+con.tel+"</option>"
          })
        }
        $('#agent_id').html(opt_str);
      }
    });
}

去ajax获取相应的代理商数据。

改造插件完成。

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
基于jquery的bankInput银行卡账号格式化
Aug 22 Javascript
javascript模拟select,jselect的方法实现
Nov 08 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
Dec 22 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
Jan 04 Javascript
Require.js的基本用法详解
Jul 03 Javascript
利用nginx + node在阿里云部署https的步骤详解
Dec 19 Javascript
你可能不知道的CORS跨域资源共享
Mar 13 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
js实现多张图片每隔一秒切换一张图片
Jul 29 Javascript
JS扩展类,克隆对象与混合类实例分析
Nov 26 #Javascript
JS自定义混合Mixin函数示例
Nov 26 #Javascript
JS克隆,属性,数组,对象,函数实例分析
Nov 26 #Javascript
JS匿名函数类生成方式实例分析
Nov 26 #Javascript
正则表达式替换html元素属性的方法
Nov 26 #Javascript
js初始化验证实例详解
Nov 26 #Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
Nov 26 #Javascript
You might like
php简单实现多维数组排序的方法
2016/09/30 PHP
Javascript base64编码实现代码
2011/12/02 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
详解JavaScript的变量
2019/04/04 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
python中format()函数的简单使用教程
2018/03/14 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
NET程序员上机面试题
2015/05/23 面试题
配件采购员岗位职责
2013/12/03 职场文书
长城的导游词
2015/01/30 职场文书
公司2015年终工作总结
2015/05/26 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
Pytest中conftest.py的用法
2021/06/27 Python
Python标准库pathlib操作目录和文件
2021/11/20 Python