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 EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
首页图片漂浮效果示例代码
Jun 05 Javascript
AngularJS单选框及多选框实现双向动态绑定
Jan 13 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
Jun 12 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
Aug 10 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
Vue实现开关按钮拖拽效果
Sep 22 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
python动态加载包的方法小结
2016/04/18 Python
Python查询IP地址归属完整代码
2017/06/21 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
django教程如何自学
2020/07/31 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
食堂个人先进事迹
2014/01/22 职场文书
代理协议书
2014/04/22 职场文书
李培根演讲稿
2014/05/22 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
2014年关工委工作总结
2014/11/17 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS