zoukankan      html  css  js  c++  java
  • smartWizard 和 uploadify 插件

    1.SmartWizard 向导插件

    第一步:引用js文件

    1     <link href="http://www.cnblogs.com/Style/js/jquery.smart_wizard.css" rel="stylesheet" type="text/css" />
    2     <script src="http://www.cnblogs.com/Style/js/jquery.smartWizard-2.0.js" type="text/javascript"></script>

    在css文件里控制向导的高度和宽度

    .swMain
    {
        float: left; 
        width: 100%;/*向导宽度,原来是980px;*/
    }
    
    .swMain .loader
    {
       
        color: #5A5655;
        background: #FFF url(../images/loader.gif) no-repeat 5px;  /*这个路径要写对了,否则会触发应用程序异常(文件未找到)*/
     
    }
    .swMain .stepContainer div.content
    { height: 460px;/*向导每一步高度,原来是height:460px;*/ width: 100%;/*向导每一步宽度,原来是968px;*/ clear: both; }

    css中引用的背景图路径要写对了,否则会触发 void Application_Error(object sender, EventArgs e) 事件,异常时文件未找到。

    第二步:定义HTML代码应用CSS样式

       <!-- Smart Wizard -->
            <div id="wizard" class="swMain">
                <ul>
                    <li><a href="#step-1">
                        <label class="stepNumber">
                            1</label>
                        <span class="stepDesc">Basic<br />
                            基本参数 </span></a></li>
                    <li><a href="#step-2">
                        <label class="stepNumber">
                            2</label>
                        <span class="stepDesc">Communication<br />
                            通讯参数 </span></a></li>
                    <li><a href="#step-3">
                        <label class="stepNumber">
                            3</label>
                        <span class="stepDesc">tags<br />
                            点信息 </span></a></li>
                    <li><a href="#step-4">
                        <label class="stepNumber">
                            4</label>
                        <span class="stepDesc">XML<br />
                            <small>设备描述文件</small> </span></a></li>
                </ul>
                <div id="step-1">
                 </div>
                <div id="step-2">
                 </div>
                <div id="step-3">
                 </div>
                <div id="step-4">
                 </div>
    </div>

    第三步:页面初始化时应用样式调整大小

    //初始化向导
    function initWizard() {
        $('#wizard').smartWizard({ labelNext: '下一步', labelPrevious: '上一步', labelFinish: '完成', onLeaveStep: leavestepCallback, onShowStep: showstepCallback, enableAllSteps: true });
    
        var h = document.body.clientHeight;
        if (h > 400) {
            $(".stepContainer").height(h - 170); //根据
            $(".swMain .stepContainer div.content").height(h - 170);
        }
        $("#templateXML").height(h - 230);
    
    }

     初始化时注册了几个事件回调,可以在这些函数里处理校验和初始化操作。比如我在第二步里用到了easyui的datagrid控件,当显示时需要调用resize 函数,否则表格是出不来的,这问题用了半天才找到原因,一开始以为是css样式冲突导致的。

    //显示下一步
    function showstepCallback(obj) {
        var step_num = obj.attr('rel');
        if (step_num == 2) {
            $("#table_Communication_datagrid").css("display", "block").datagrid('resize');
            $("#table_ProtocalParameter_datagrid").css("display", "block").datagrid('resize');
        }
        else if (step_num == 3) {
            $("#table_Point_datagrid").css("display", "block").datagrid('resize');
    
        }
        return true;
    }

    向导的大小也是比较麻烦的,在css样式里设置高度100%,不起作用,所以用代码控制大小了。
    2.uploadify上传插件

    第一步:应用js文件

        <script src="../Style/js/uploadify-v3.1/jquery.uploadify-3.1.js" type="text/javascript"></script>
        <link href="../Style/js/uploadify-v3.1/uploadify.css" rel="stylesheet" type="text/css" />

    第二步:在HTML代码里使用table布局方式使用上传插件。

     <tr>
                    <th class="ItemName" style=" 100px;">
                        驱动文件: <%--<input type="checkbox" name="ReplaceFile" value="" />覆盖现有文件--%>
                    </th>
                    <td>
                        <input type="text" id="CfgFileName" name="CfgFileName" readonly="readonly" class="easyui-validatebox"
                            data-options="required:true,missingMessage:'请上传驱动配置文件'" style=" 260px;"
                            value="" />
                        <div id="some_file_queue"> <%--用于显示上传的flash文件--%>
                        </div>
                    </td>
                    <td style="padding: 0px; vertical-align: middle; padding-top: 10px;">
                        <input type="file" name="uploadify" id="uploadify" />
     <%--用于显示上传的按钮--%>                 
    </td> </tr>

    本来想把“上传”按钮直接放到路径文本框后面,但显示的效果总是会出现换行,所以使用table布局,放到一个新的单元格里了。
    第三步:页面加载时初始化上传插件

      function initUploadify() {
                /// <summary>初始化上传控件</summary>
                $("#uploadify").uploadify({
                    height: 20,
                    swf: '../Style/js/uploadify-v3.1/uploadify.swf',
                    buttonText: "浏览...",
                    // fileTypeExts: "*.xml",
                    progressData: 'percentage',
                    queueID: "some_file_queue",
                    onUploadSuccess: function (file, data, response) {
                        var result = eval('(' + data + ')');
                        if (result.success) {
                            $("#DriverName").val(result.obj.DriverName);
                            $("#DriverFileName").val(result.obj.DriverFileName);
                            $("#CfgXML").val(result.obj.FileName);
                            $("#CfgFileName").val(file.name + ",保存成功!");
                            $("#IsCfgXMLUpdate").val(true);
                        }
                        else {
                            $("#CfgFileName").val("文件保存失败," + result.msg + "!");
                            $("#IsCfgXMLUpdate").val(false);
                        }
                    },
                    uploader: '../AjaxHandler/UploadHandler.ashx?Type=Driver&folder=<%=DriverFolder %>',
                     120
                });
            }

    详细参数可以看它官网示例,这里注意的是从后台返回来的数据 data 是字符串格式,所以需要使用 eval转成对象。
    后台代码:

        public override bool ProcessRequestcontext()
        {
            try
            {
                this.Context.Response.ContentType = "text/plain";
                this.Context.Response.Charset = "utf-8";
                string folder = this.Context.Request["folder"];
                string folderPath = HttpContext.Current.Server.MapPath(folder) + "\\";
                string type = this.Context.Request["Type"];
    
                if (!Directory.Exists(folderPath))
                    Directory.CreateDirectory(folderPath); //有可能权限不够
    
                HttpPostedFile file = this.Context.Request.Files["Filedata"];
    
                if (file != null)
                {
                    string filePath = folderPath + file.FileName;
                    if (File.Exists(filePath))
                        File.Delete(filePath);
    
                    file.SaveAs(filePath);
                    //成功时返回文件的完整路径
                    if (type == "Driver")//驱动文件
                    {
                        XmlDocument doc = new XmlDocument();
                        doc.Load(filePath);
                        DriverCfg cfg = DriverCfg.LoadCfg(doc);
                        var cfgInfo = new { DriverName = cfg.DriverName, DriverFileName = cfg.DriverFileName, FileName = folder + "\\" + file.FileName };
                        this.Context.Response.Write(JsonConvert.SerializeObject(new JSON(true, cfgInfo)));
                    }
                    else if (type == "Photo")
                    {
                        string fileUrl = folder + "\\" + file.FileName;
                        this.Context.Response.Write(JsonConvert.SerializeObject(new JSON(true, null, fileUrl)));
                    }
                }
                else
                {
                    this.Context.Response.Write(JsonConvert.SerializeObject(new JSON(false, null, "上传的文件为空")));
                }
                return true;
            }
            catch (Exception ex)
            {
                this.Context.Response.Write(JsonConvert.SerializeObject(new JSON(false, null, ex.Message, ex)));
                return false;
    
            }
        }
  • 相关阅读:
    Spring 循环依赖的三种方式(三级缓存解决Set循环依赖问题)
    终于有人把“TCC分布式事务”实现原理讲明白了
    Java synchronized 关键字的实现原理
    Synchronized的实现原理(汇总)
    Spring的Bean的生命周期(大众版)
    Synchronized与Lock的区别与应用场景
    Lock与synchronized 的区别
    线程的同步控制synchronized和lock的对比和区别
    lock和synchronized的同步区别与选择
    Mybatis3.x与Spring4.x整合
  • 原文地址:https://www.cnblogs.com/zhaobl/p/2873663.html
Copyright © 2011-2022 走看看