项目知识点汇总

来源:互联网 发布:linux 卡在进度条 编辑:程序博客网 时间:2024/06/08 13:50
在做项目的时候,回遇到很多很小的地方,但是解决起来可能会花点很长时间,有的甚至超过了实现一个功能的时间,也许不解决可能用,但是bug就在那里,不解决,不死心。

1、解决火狐缓存xml问题
   在后台配置页中,需要读取服务器端的xml文件来实现配置,所以每当移动或修改xml时,需要加载服务器端的xml,这里在火狐、谷歌等浏览器有一个问题,就是每当修改完xml后重新加载的时候,因为此时读取的是xml的缓存文件,所以无法获得最新的xml数据,手动清理缓存之后,变可以重新实现移动和修改。听起来这是个很简单的问题,就这么一个小问题几乎用了三天时间,其中有两天是和小崔一起弄的。
 首先,在加载网页加上时间戳是行不通的,不知道为什么。
 其次,使用网上给出的清理缓存的方式是行不通的,不知道为什么。
 再次,强制刷新网页(ctrl+F5)在火狐中是行不通的,因为它中弹出提示框。
 最后,解决办法是,在加载xml的地方,在xml文件名后加上时间戳,其实之前从来都没有在需要加载的文件后加过时间戳,感觉这个问题纯属经验问题,如果不懂,可能会绕很多弯路,但是如果知道,甚至连半分钟都不到,轻松解决了。
 
 
 
2、各种浏览器的兼容问题
我们知道,不同的浏览器对js的解析有些地方时不一样的,不如在火狐中就没有innerText,在IE8中没有textContent,所以,如果兼容不同的浏览器,需要对浏览器进行判断,这个问题比较好解决,找到不同的地方,然后进行判断即可,下面举个例子。
  if (navigator.userAgent.indexOf("MSIE") > 0) {
                        //循环当前list,如果与当前点击的li内容相同,则执行点击当前li,把信息写入到弹出框中
                        for (var i = 0; i < popDivClick.length; i++) {
                            if (popDivClick[i].innerText == elaClass) {
                                popDivClick[i].click();
                            }
                        }
                    }
                        //如果为火狐
                    else if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) {
                        //循环当前list,如果与当前点击的li内容相同,则执行点击当前li,把信息写入到弹出框中
                        for (var i = 0; i < popDivClick.length; i++) {
                            if (popDivClick[i].textContent == elaClass) {
                                popDivClick[i].click();
                            }
                        }
                    }
                    else if (navigator.userAgent.indexOf("Chrome") >= 0) {
                        //循环当前list,如果与当前点击的li内容相同,则执行点击当前li,把信息写入到弹出框中
                        for (var i = 0; i < popDivClick.length; i++) {
                            if (popDivClick[i].innerText == elaClass) {
                                popDivClick[i].click();
                            }
                        }
                    }
                    else if (navigator.userAgent.indexOf("Opera") >=0) {
                        //循环当前list,如果与当前点击的li内容相同,则执行点击当前li,把信息写入到弹出框中
                        for (var i = 0; i < popDivClick.length; i++) {
                            if (popDivClick[i].innerText == elaClass) {
                                popDivClick[i].click();
                            }
                        }
                    }

 
 
 
3、给下拉框赋值,在修改的时候,做的是弹出框,有个地方是需要下拉框的,但是下拉框的初始值应该是修改前的值,所以这里就需要给下拉框赋值,这里比起给textbox赋值来说,更复杂一些。
          //给下拉框赋值
            var drop = document.getElementById('dropModify');
            var checks = drop.getElementsByTagName("option");
            for (var i = 0; i < checks.length; i++) {
                if (checks[i].value == ip) {
                    drop.selectedIndex = i;
                }
            }
解决单选框和下拉框的思路是一样的,也是用于修改时初始化选项
        //得到所有radio
            var vRbtidList = vRbtid.getElementsByTagName("INPUT");
            //循环tree节点
            for (var i = 0; i < childNodes.length; i++) {
                //获取当前选中节点
                if (childNodes[i].attributes[0].nodeTypedValue == el.options[el.selectedIndex].text) {
                    //当节点为content是选中否,否则选中是
                    if (childNodes[i].attributes[2].nodeTypedValue == "content") {
                        vRbtidList[1].checked = true;
                        return;
                    }
                    else {
                        vRbtidList[0].checked = true;
                        return;
                    }
                }
 
 
 
4、使鼠标放上去label显示完整内容
  有时候数据很长,比如在表格中,我们如果显示完整数据的话,表格会变得很丑,所以这里需要把显示部分数据,然后鼠标放上去的时候弹出一个小的弹出框显示完整数据。
 首先,只显示部分数据的方法
  <style type="text/css">
          
        .mlength
        {
            display: block;
            width: 50px;
            overflow: hidden;
            white-space: nowrap;
           
            -o-text-overflow: ellipsis;
            
            text-overflow: ellipsis;
          
        }
        
       
    </style>
显示弹出框
 <asp:Label ID="lblId" runat="server" ToolTip='<%# Eval("cardId") %>' Text='<%# Eval("cardId").ToString()=="0"?Eval("cardId").ToString():Eval("cardId").ToString().Substring(26,6) %>'></asp:Label></td>
这里还有一个知识点,就是因为绑定的卡号一般为32未,在label中要显示后六位,但是在系统初始中,初始现金支付使用的是卡号0,只有一位,如果直接绑定会报错,这里这里需要判断该卡号是否未0,未0的话就不截取字符串,不为零的话截取,这里用的是三木运算符。

 
 
5、数据库中的日期时间只显示日期(绑定表格时使用)
 <asp:Label ID="Label1" runat="server" Text='<%# Eval("birthday","{0:yyyy-MM-dd}")%>'></asp:Label>


其实可以发现,这些问题不解决不会影响到运行,比如,限制客户只能用IE,或者是界面丑一点也没有太大关系,不影响功能,但是,当解决之后就会发现,其实它不仅仅是解决一个功能,这些问题,解决了,以后就永远都解决了,不解决,就永远都是个问题。
原创粉丝点击