zoukankan      html  css  js  c++  java
  • 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('fuck you');
        }
    }
    
    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不是函数的时候,弹出fuck you

    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获取相应的代理商数据。

    改造插件完成。

  • 相关阅读:
    我异常-VS2012“System.AccessViolationException: 试图读取或写入保护内存。”
    JAVA学习笔记 -- JDBC及其应用
    创建Windows类别
    非递归二叉树遍历
    如何使用Maven创建web工程(详细步骤)
    HDOJ 3966 Aragorn&#39;s Story
    SQLServer-----SQLServer 2008 R2卸载
    hdu 4869 Turn the pokers
    MTK6572横屏的调试过程
    【MongoDB】Serveral common command of MongoDb
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5002419.html
Copyright © 2011-2022 走看看