項目知識點匯總
來源:互聯網
上載者:User
在做項目的時候,回遇到很多很小的地方,但是解決起來可能會花點很長時間,有的甚至超過了實現一個功能的時間,也許不解決可能用,但是bug就在那裡,不解決,不死心。1、解決Firefox緩衝xml問題 在後台配置頁中,需要讀取伺服器端的xml檔案來實現配置,所以每當移動或修改xml時,需要載入伺服器端的xml,這裡在Firefox、Google等瀏覽器有一個問題,就是每當修改完xml後重新載入的時候,因為此時讀取的是xml的快取檔案,所以無法獲得最新的xml資料,手動清理緩衝之後,變可以重新實現移動和修改。聽起來這是個很簡單的問題,就這麼一個小問題幾乎用了三天時間,其中有兩天是和小崔一起弄的。 首先,在載入網頁加上時間戳記是行不通的,不知道為什麼。 其次,使用網上給出的清理緩衝的方式是行不通的,不知道為什麼。 再次,強制重新整理網頁(ctrl+F5)在Firefox中是行不通的,因為它中彈出提示框。 最後,解決辦法是,在載入xml的地方,在xml檔案名稱後加上時間戳記,其實之前從來都沒有在需要載入的檔案後加過時間戳記,感覺這個問題純屬經驗問題,如果不懂,可能會繞很多彎路,但是如果知道,甚至連半分鐘都不到,輕鬆解決了。 2、各種瀏覽器的相容問題我們知道,不同的瀏覽器對js的解析有些地方時不一樣的,不如在Firefox中就沒有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(); } } } //如果為Firefox 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,或者是介面醜一點也沒有太大關係,不影響功能,但是,當解決之後就會發現,其實它不僅僅是解決一個功能,這些問題,解決了,以後就永遠都解決了,不解決,就永遠都是個問題。