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的datepicker的本地化以及Today问题
May 23 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 Javascript
jQuery实现图片上传和裁剪插件Croppie
Nov 29 Javascript
JavaScript字符串删除重复字符的方法
Dec 25 Javascript
表单元素值获取方式js及java方式的简单实例
Oct 15 Javascript
详解基于angular路由的requireJs按需加载js
Jan 20 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
在vue中使用vuex,修改state的值示例
Nov 08 Javascript
vue 实现上传组件
May 31 Vue.js
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与MySQL开发的8个技巧小结
2010/12/17 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
PHP单链表的实现代码
2016/07/05 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
jquery 学习笔记一
2010/04/07 Javascript
jquery 笔记 事件
2011/11/02 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
python协程之动态添加任务的方法
2019/02/19 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
Python包和模块的分发详细介绍
2020/06/19 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
公关活动策划方案
2014/05/25 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书