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 相关文章推荐
js控制div及网页相关属性的代码
Dec 19 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
jQuery处理json数据返回数组和输出的方法
Mar 11 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
angularjs点击图片放大实现上传图片预览
Feb 24 Javascript
巧用weui.topTips验证数据的实例
Apr 17 Javascript
SeaJS中use函数用法实例分析
Oct 10 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
微信小程序实现全国机场索引列表
Jan 31 Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
使用php来实现网络服务
2009/09/15 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
sails框架的学习指南
2014/12/22 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
用Python抢过年的火车票附源码
2015/12/07 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Atom的python插件和常用插件说明
2018/07/08 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
密封类可以有虚函数吗
2014/08/11 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
广告词串烧
2014/03/19 职场文书
学习演讲稿范文
2014/05/10 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
单位工作证明范文
2014/09/14 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书