JQuery学习5——级联下拉框效果

本文介绍了使用JQuery1.7.1版本实现级联下拉框效果以及通过JavaScript的Image对象进行图片预加载的技巧。在实际操作中,发现在JQuery1.9.1版本中遇到function执行问题,故选择旧版本。同时分享了整个学习过程中的源码链接和关键JS代码,供读者参考学习。

           JQuery的学习可以告一段落了,在最后的一次学习中,又让我感触到了我前面说的。

           在做AJAX的时候,用JQuery1.7.1版本和JQuery1.9.1版本好像里面的function无法执行一样,不得已还是用的以前的版本,多实践感悟就会更深。

            在最后一次学习中又学习到了新的内容:

            1、可以用JQuery中的data来缓存数据。

            2、可以用javascript中的Image对象来做预装载图片

            下面是我在本次系列学习过程中实现的源码,如果有感兴趣的朋友可以下载

             http://download.youkuaiyun.com/detail/yjjm1990/5174469

             下面是JS代码,方便以后自己进行查阅:

/// <reference path="jquery.js" />

$(document).ready(function () {
    var carName = $(".carName").children("select");
    var carType = $(".carType").children("select");
    var whellType = $(".whellType").children("select");

    //首先为三个下拉选择框,值改变时注册事件
    carName.change(function () {
        var carNameVlaue = carName.val();
        if (carNameVlaue != "") {
            //如果选择的car的名字的value不为空的话

            //如果缓存里有数据
            if (carName.data(carNameVlaue) != undefined) {
                //这是测试用的
                //alert(carName.data(carNameVlaue));
                var returnData = carName.data(carNameVlaue);
                //把之前的数据清空
                carType.html("");
                //添加一个请“请选择汽车类型”
                $(" <option value=''>请选择汽车类型</option>").appendTo(carType);
                //如果返回的数据不为空的话
                for (var i = 0; i < returnData.length; i++) {
                    $('<option value="' + returnData[i] + '">' + returnData[i] + "</option>").appendTo(carType);
                }
                carType.parent().show();
                $("#carImg").hide();
            }
            else {
                $.post("ChainSelect.ashx", { keyword: carNameVlaue, type: "top" }, function (data) {
                    if (data.length != 0) {
                        //把之前的数据清空
                        carType.html("");
                        //添加一个请“请选择汽车类型”
                        $(" <option value=''>请选择汽车类型</option>").appendTo(carType);
                        //如果返回的数据不为空的话
                        for (var i = 0; i < data.length; i++) {
                            $('<option value="' + data[i] + '">' + data[i] + "</option>").appendTo(carType);
                        }
                        carType.parent().show();
                        $("#carImg").hide();

                        //将数据进行缓存
                        carName.data(carNameVlaue, data);
                    }
                    else {
                        //如果没有返回数据的话
                        carType.parent().hide();
                        carName.next("img").hide();
                        $("#carImg").hide();
                    }
                }, "json");
            }
        }
        else {
            whellType.parent().hide();
            carType.parent().hide();
            carName.next("img").hide();
            $("#carImg").hide();
        }
    });

    carType.change(function () {
        var carTypeVlaue = carType.val();
        if (carTypeVlaue != "") {
            //如果选择的car的名字的value不为空的话
            $.post("ChainSelect.ashx", { keyword: carTypeVlaue, type: "sub" }, function (returnData) {
                if (returnData.length != 0) {
                    //把之前的数据清空
                    whellType.html("");
                    //添加一个请“请选择汽车类型”
                    $("<option value=''>请选择车轮类型</option>").appendTo(whellType);
                    //如果返回的数据不为空的话
                    for (var i = 0; i < returnData.length; i++) {
                        $('<option value="' + returnData[i] + '">' + returnData[i] + "</option>").appendTo(whellType);
                    }
                    whellType.parent().show();
                    carType.next("img").show();
                    $("#carImg").hide();
                                  

                }
                else {
                    //如果没有返回数据的话
                    whellType.parent().hide();
                    carType.next("img").hide();
                    $("#carImg").hide();
                }
            }, "json");
        }
        else {
            whellType.parent().hide();
            carType.next("img").hide();
            $("#carImg").hide();
        }
    });

    whellType.change(function () {
        var imgData = carName.val() + "_" + carType.val() + "_" + whellType.val();
        $("#carImg").show();
        $("#carImage").hide();
        $("#imgLoading").show();
        //通过javascript中的Image对象预装载图像
        var cacheimg = new Image();
        $(cacheimg).attr({ "src": "images/" + imgData + ".jpg", alt: imgData }).load(function () {
            //隐藏loading
            //当然如果这里还可以加上我们前面说过的效果。
            $("#imgLoading").hide();
            $("#carImage").attr({ src: "images/" + imgData + ".jpg", alt: imgData }).show();;
        });

    });


    //给数据装载中的结点定义ajax事件,实现动画提示效果
    $("#loading").ajaxStart(function () {
        $(this).css("visibility", "visible");
        $(this).animate({
            opacity: 1
        }, 0);
    }).ajaxStop(function () {
        $(this).animate({
            opacity: 0
        }, 500);
    });
});


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值