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实现多域名不同文件的调用方法
Jan 12 Javascript
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
各种常用的JS函数整理
Oct 25 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
使用jQuery实现返回顶部
Jan 26 Javascript
jquery常用函数与方法汇总
Sep 01 Javascript
基于javascript实现图片左右切换效果
Jan 25 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 Javascript
jQuery实现移动端图片上传预览组件的方法分析
May 01 jQuery
JS闭包原理及其使用场景解析
Dec 03 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实现可逆加密的方法
2015/08/11 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
python实现无证书加密解密实例
2014/10/27 Python
发布你的Python模块详解
2016/09/15 Python
Python三级目录展示的实现方法
2016/09/28 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
工商企业管理应届生求职信
2013/11/03 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
5s标语大全
2014/06/23 职场文书
运动会报道稿300字
2014/10/02 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers