yunye 的 JavaBlog

          @see codemouse

          統計

          留言簿(1)

          閱讀排行榜

          評論排行榜

          javascript的IE和Firefox兼容性匯編

          1. document.form.item 問題
          (1)現有問題:
          現有代碼中存在許多 document.formName.item("itemName") 這樣的語句,不能在 MF 下運行
          (2)解決方法:
          改用 document.formName.elements["elementName"]
          (3)其它
          參見 2

          2. 集合類對象問題
          (1)現有問題:
          現有代碼中許多集合類對象取用時使用 (),IE 能接受,MF 不能。
          (2)解決方法:
          改用 [] 作為下標運算。如:document.forms("formName") 改為 document.forms["formName"]。
          又如:document.getElementsByName("inputName")(1) 改為 document.getElementsByName("inputName")[1]

          3. window.event
          (1)現有問題:
          使用 window.event 無法在 MF 上運行
          (2)解決方法:
          MF 的 event 只能在事件發生的現場使用,此問題暫無法解決。可以這樣變通:
          原代碼(可在IE中運行):

          ...

          新代碼(可在IE和MF中運行):

          ...

          此外,如果新代碼中第一行不改,與老代碼一樣的話(即 gotoSubmit 調用沒有給參數),則仍然只能在IE中運行,但不會出錯。所以,這種方案 tpl 部分仍與老代碼兼容。

          4. HTML 對象的 id 作為對象名的問題
          (1)現有問題
          在 IE 中,HTML 對象的 ID 可以作為 document 的下屬對象變量名直接使用。在 MF 中不能。
          (2)解決方法
          用 getElementById("idName") 代替 idName 作為對象變量使用。

          5. 用idName字符串取得對象的問題
          (1)現有問題
          在IE中,利用 eval(idName) 可以取得 id 為 idName 的 HTML 對象,在MF 中不能。
          (2)解決方法
          用 getElementById(idName) 代替 eval(idName)。

          6. 變量名與某 HTML 對象 id 相同的問題
          (1)現有問題
          在 MF 中,因為對象 id 不作為 HTML 對象的名稱,所以可以使用與 HTML 對象 id 相同的變量名,IE 中不能。
          (2)解決方法
          在聲明變量時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運行。
          此外,最好不要取與 HTML 對象 id 相同的變量名,以減少錯誤。
          (3)其它
          參見 問題4

          [NextPage]

          7. event.x 與 event.y 問題
          (1)現有問題
          在IE 中,event 對象有 x, y 屬性,MF中沒有。
          (2)解決方法
          在MF中,與event.x 等效的是 event.pageX。但event.pageX IE中沒有。
          故采用 event.clientX 代替 event.x。在IE 中也有這個變量。
          event.clientX 與 event.pageX 有微妙的差別(當整個頁面有滾動條的時候),不過大多數時候是等效的。

          如果要完全一樣,可以稍麻煩些:
          mX = event.x ? event.x : event.pageX;
          然后用 mX 代替 event.x
          (3)其它
          event.layerX 在 IE 與 MF 中都有,具體意義有無差別尚未試驗。

          8. 關于frame
          (1)現有問題
          在 IE中 可以用window.testFrame取得該frame,mf中不行
          (2)解決方法
          在frame的使用方面mf和ie的最主要的區別是:
          如果在frame標簽中書寫了以下屬性:

          那么ie可以通過id或者name訪問這個frame對應的window對象
          而mf只可以通過name來訪問這個frame對應的window對象
          例如如果上述frame標簽寫在最上層的window里面的htm里面,那么可以這樣訪問
          ie: window.top.frameId或者window.top.frameName來訪問這個window對象
          mf: 只能這樣window.top.frameName來訪問這個window對象

          另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")來訪問frame標簽
          并且可以通過window.top.document.getElementById("testFrame").src = ‘xx.htm’來切換frame的內容
          也都可以通過window.top.frameName.location = ‘xx.htm’來切換frame的內容
          關于frame和window的描述可以參見bbs的‘window與frame’文章
          以及/test/js/test_frame/目錄下面的測試
          ----adun 2004.12.09修改

          9. 在mf中,自己定義的屬性必須getAttribute()取得

          10.在mf中沒有 parentElement parement.children 而用parentNode parentNode.childNodes
          childNodes的下標的含義在IE和MF中不同,MF使用DOM規范,childNodes中會插入空白文本節點。
          一般可以通過node.getElementsByTagName()來回避這個問題。
          當html中節點缺失時,IE和MF對parentNode的解釋不同,例如






          MF中input.parentNode的值為form, 而IE中input.parentNode的值為空節點

          MF中節點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)

          11.const 問題
          (1)現有問題:
          在 IE 中不能使用 const 關鍵字。如 const constVar = 32; 在IE中這是語法錯誤。
          (2)解決方法:
          不使用 const ,以 var 代替。

          12. body 對象
          MF的body在body標簽沒有被瀏覽器完全讀入之前就存在,而IE則必須在body完全被讀入之后才存在

          13. url encoding
          在js中如果書寫url就直接寫&不要寫&例如var url = ‘xx.jsp?objectName=xx&objectEvent=xxx’;
          frm.action = url那么很有可能url不會被正常顯示以至于參數沒有正確的傳到服務器
          一般會服務器報錯參數沒有找到
          當然如果是在tpl中例外,因為tpl中符合xml規范,要求&書寫為&
          一般MF無法識別js中的&

          14. nodeName 和 tagName 問題
          (1)現有問題:
          在MF中,所有節點均有 nodeName 值,但 textNode 沒有 tagName 值。在 IE 中,nodeName 的使用好象
          有問題(具體情況沒有測試,但我的IE已經死了好幾次)。
          (2)解決方法:
          使用 tagName,但應檢測其是否為空。

          15. 元素屬性
          IE下 input.type屬性為只讀,但是MF下可以修改

          js常用代碼

          event.clientX 返回最后一次點擊鼠標X坐標值;
          event.clientY 返回最后一次點擊鼠標Y坐標值;
          event.offsetX 返回當前鼠標懸停X坐標值
          event.offsetY 返回當前鼠標懸停Y坐標值
          document.write(document.lastModified) 網頁最后一次更新時間
          document.ondblclick=x 當雙擊鼠標產生事件
          document.onmousedown=x 單擊鼠標鍵產生事件
          document.body.scrollTop; 返回和設置當前豎向滾動條的坐標值,須與函數配合,
          document.body.scrollLeft; 返回和設置當前橫向滾動務的坐標值,須與函數配合,
          document.title document.title="message"; 當前窗口的標題欄文字
          document.bgcolor document.bgcolor="顏色值"; 改變窗口背景顏色
          document.Fgcolor document.Fgcolor="顏色值"; 改變正文顏色
          document.linkcolor document.linkcolor="顏色值"; 改變超聯接顏色
          document.alinkcolor document.alinkcolor="顏色值"; 改變正點擊聯接的顏色
          document.VlinkColor document.VlinkColor="顏色值"; 改變已訪問聯接的顏色
          document.forms.length 返回當前頁form表單數
          document.anchors.length 返回當前頁錨的數量
          document.links.length 返回當前頁聯接的數量
          document.onmousedown=x 單擊鼠標觸發事件
          document.ondblclick=x 雙擊鼠標觸發事件
          defaultStatus window.status=defaultStatus; 將狀態欄設置默認顯示
          function function xx(){...} 定義函數
          isNumeric 判斷是否是數字
          innerHTML xx=對象.innerHTML 輸入某對象標簽中的html源代碼
          innerText divid.innerText=xx 將以div定位以id命名的對象值設為XX
          location.reload(); 使本頁刷新,target可等于一個刷新的網頁
          Math.random() 隨機涵數,只能是0到1之間的數,如果要得到其它數,可以為*10,再取整
          Math.floor(number) 將對象number轉為整數,舍取所有小數
          Math.min(1,2) 返回1,2哪個小
          Math.max(1,2) 返回1,2哪個大
          navigator.appName 返回當前瀏覽器名稱
          navigator.appVersion 返回當前瀏覽器版本號
          navigator.appCodeName 返回當前瀏覽器代碼名字
          navigator.userAgent 返回當前瀏覽器用戶代標志
          onsubmit onsubmit="return(xx())" 使用函數返回值
          opener opener.document.對象 控制原打開窗體對象
          prompt xx=window.prompt("提示信息","預定值"); 輸入語句
          parent parent.框架名.對象 控制框架頁面
          return return false 返回值
          random 隨機參數(0至1之間)
          reset() form.reset(); 使form表單內的數據重置
          split("") string.split("") 將string對象字符以逗號隔開
          submit() form對象.submit() 使form對象提交數據
          String對象的 charAt(x)對象 反回指定對象的第多少位的字母
          lastIndexOf("string") 從右到左詢找指定字符,沒有返回-1
          indexOf("string") 從左到右詢找指定字符,沒有返回-1
          LowerCase() 將對象全部轉為小寫
          UpperCase() 將對象全部轉為大寫
          substring(0,5) string.substring(x,x) 返回對象中從0到5的字符
          setTimeout("function",time) 設置一個超時對象
          setInterval("function",time) 設置一個超時對象
          toLocaleString() x.toLocaleString() 從x時間對象中獲取時間,以字符串型式存在
          typeof(變量名) 檢查變量的類型,值有:String,Boolean,Object,Function,Underfined
          window.event.button==1/2/3 鼠標鍵左鍵等于1右鍵等于2兩個鍵一起按為3
          window.screen.availWidth 返回當前屏幕寬度(空白空間)
          window.screen.availHeight 返回當前屏幕高度(空白空間)
          window.screen.width 返回當前屏幕寬度(分辨率值)
          window.screen.height 返回當前屏幕高度(分辨率值)
          window.document.body.offsetHeight; 返回當前網頁高度
          window.document.body.offsetWidth; 返回當前網頁寬度
          window.resizeTo(0,0) 將窗口設置寬高
          window.moveTo(0,0) 將窗口移到某位置
          window.focus() 使當前窗口獲得焦點
          window.scroll(x,y) 窗口滾動條坐標,y控制上下移動,須與函數配合
          window.open() window.open("地址","名稱","屬性")
          屬性:toolbar(工具欄),location(地址欄),directions,status(狀態欄),
          menubar (菜單欄),scrollbar(滾動條),resizable(改變大小), width(寬),height(高),fullscreen(全屏),scrollbars(全屏時無滾動條無參 數,channelmode(寬屏),left(打開窗口x坐標),top(打開窗口y坐標)
          window.location = 'view-source:' + window.location.href 應用事件查看網頁源代碼;

          a=new Date(); //創建a為一個新的時期對象
          y=a.getYear(); //y的值為從對象a中獲取年份值 兩位數年份
          y1=a.getFullYear(); //獲取全年份數 四位數年份
          m=a.getMonth(); //獲取月份值
          d=a.getDate(); //獲取日期值
          d1=a.getDay(); //獲取當前星期值
          h=a.getHours(); //獲取當前小時數
          m1=a.getMinutes(); //獲取當前分鐘數
          s=a.getSeconds(); //獲取當前秒鐘數

          對象.style.fontSize="文字大小";
          單位:mm/cm/in英寸/pc帕/pt點/px象素/em文字高
          1in=1.25cm
          1pc=12pt
          1pt=1.2px(800*600分辯率下)
          文本字體屬性:
          fontSize大小
          family字體
          color顏色
          fontStyle風格,取值為normal一般,italic斜體,oblique斜體且加粗
          fontWeight加粗,取值為100到900不等,900最粗,light,normal,bold
          letterSpacing間距,更改文字間距離,取值為,1pt,10px,1cm
          textDecoration:文字修飾;取值,none不修飾,underline下劃線,overline上劃線
          background:文字背景顏色,
          backgroundImage:背景圖片,取值為圖片的插入路徑

          點擊網頁正文函數調用觸發器:
          1.onClick 當對象被點擊
          2.onLoad 當網頁打開,只能書寫在body中
          3.onUnload 當網頁關閉或離開時,只能書寫在body中
          4.onmouseover 當鼠標懸于其上時
          5.onmouseout 當鼠標離開對象時
          6.onmouseup 當鼠標松開
          7.onmousedown 當鼠標按下鍵
          8.onFocus 當對象獲取焦點時
          9.onSelect 當對象的文本被選中時
          10.onChange 當對象的內容被改變
          11.onBlur 當對象失去焦點
          onsubmit=return(ss())表單調用時返回的值
          直線 border-bottom:1x solid black
          虛線 border-bottom:1x dotted black
          點劃線 border-bottom:2x dashed black
          雙線 border-bottom:5x double black
          槽狀 border-bottom:1x groove black
          脊狀 border-bottom:1x ridge black

          1.邊緣高光glow(color=顏色,strength=亮光大小)

          2.水平翻轉fliph() 使對象水平翻轉180度

          3.垂直翻轉flipv() 使對象垂直翻轉180度

          4.對象模糊blur(add=true/false direction=方向 strength=強度)
          add指定是否按印象畫派進行模糊direction模糊方向strength模糊強度
          5.對象透明alpha(opaction=0-100,finishopacity=0-100,style=0/1/2/3)
          opaction對象整體不透明值finishopacity當對象利用了漸透明時該項指定結束透明位置的不透明值style指定透明方式0為整體透明,1為線型透明,2為圓型透明,3為矩形透明
          6.去除顏色chroma(color=顏色值)使對象中顏色與指定顏色相同區域透明
          7.建立陰影dropshadow(color=陰影顏色,offx=水平向左偏離像素,offy=水平向下偏離像素)
          8.去色gray()使對象呈灰度顯示
          9.負片效果invert()使對象呈底片效果
          10.高光light()使對象呈黑色顯示
          11.遮蓋mask(color=顏色)使整個對象以指定顏色進行蒙板一次
          opacity 表透明度水平.0~100,0表全透明,100表完全不透明
          finishopacity表想要設置的漸變透明效果.0~100.
          style 表透明區的形狀.0表統一形狀.1表線形.2表放射形.3表長方形.
          startx.starty表漸變透明效果的開始時X和Y坐標.
          finishx,finishy漸變透明效果結束時x,y 的坐標.
          add有來確定是否在模糊效果中使有原有目標.值為0,1.0表"否",1表"是".
          direction設置模糊的方向.0度表垂直向上,45度為一個單位.默認值是向左270度.left,right,down,up.
          strength 只能用整數來確定.代表有多少個像素的寬度將受到模糊影響.默認是5個.
          color要透明的顏色.
          offx,offy分別是x,y 方向陰影的偏移量.
          positive指投影方式.0表透明像素生成陰影.1表只給出不透明像素生成陰影..
          AddAmbient:加入包圍的光源.
          AddCone:加入錐形光源.
          AddPoint加入點光源
          Changcolor:改變光的顏色.
          Changstrength:改變光源的強度.
          Clear:清除所有的光源.
          MoveLight:移動光源.
          freq是波紋的頻率,在指定在對象上一區需要產生多少個完事的波紋.
          lightstrength可對于波紋增強光影的效果.顯著0~100正整數,正弦波開始位置是0~360度.0表從0度開始,25表從90度開始.
          strength表振幅大小.

          hand style="cursor:hand"
          crosshair style="cursor:crosshair"
          text style="cursor:text"
          wait style="cursor:wait"
          default style="cursor:default"
          help style="cursor:help"
          e-resize style="cursor:e-resize"
          ne-resize style="cursor:ne-resize"
          n-resize style="cursor:n-resize"
          nw-resize style="cursor:nw-resize"
          w-resize style="cursor:w-resize"
          s-resize style="cursor:s-resize"
          sw-resize style="cursor:sw-resize "
          se-resize style="cursor:se-resize"
          auto style="cursor:auto"

          web交互界面易用性設計和驗收的指導性原則

          隨著企業intranet和國際internet的迅速發展,越來越多的工作流程,商務交易,教育、培訓、會議和講座,以及個人消費娛樂都被轉移到所謂的萬維網(World?Wide?Web,以下簡稱WEB)上來了。與此相對應的是交互操作的復雜性越來越高。

          隨著Browser/Server模式的日漸流行,很多操作都是在瀏覽器環境下的網頁上完成的,并不是只有失效的鏈接和意外的出錯才會使操作者感到煩惱,即便是一次完整的成功操作過程,也可能因為操作的繁復性過高或者使用上的不方便而給操作者帶來不愉快的體驗。

          本文試圖闡述WEB交互頁面設計的一些指導性原則,這些原則有利于避免發生不愉快的操作體驗。這些原則是用戶友好性的,是在完成同一種操作要求下,使用戶最感到輕松、簡單、舒適的WEB交互界面設計原則。我們假定我們討論的WEB頁面都是功能正常的,符合美學觀點的。需要說明我們討論的原則可能會和設計上的美學觀點以及既有的功能設計有所沖突。如果發生這種情況,基于“實用的就是美的”觀點,我們會建議您酌情放棄原先的美學觀點與功能設計。


          ?


          1.?輸入控件的自動聚焦和可用鍵盤切換輸入焦點?


          使用JavaScript實現頁面加載完成后立即自動聚焦(focus)到第一個輸入控件。可用TAB鍵(IE缺省實現)或方向鍵切換聚焦到下一個輸入控件。?


          輸入控件指WEB頁面表單(
          )中顯式的,需要用戶進行修改、編輯操作的表單元素。對于這些控件,如果沒有自動聚焦操作,不可避免的出現一次用戶鼠標定位操作(如果用戶此前處于鍵盤輸入操作狀態或鼠標定位后需要進行鍵盤輸入操作,實際上是鍵盤鼠標切換操作)。如果鼠標定位后需要進行鍵盤輸入操作,如果不能鍵盤切換輸入焦點,那么不可避免的在切換輸入焦點時需要反復的鍵盤鼠標切換操作,這是很繁瑣的。

          如果實現了頁面加載完成即自動聚焦到第一個輸入控件,并且可以鍵盤切換輸入焦點標定位操作,那么對于用戶來說整個頁面的輸入操作可能都不需要鼠標操作,或次數較少,這是一種便利。畢竟頻繁的鍵盤鼠標切換操作是比較累人的。

          對于有輸入欄的對話框或網頁,在不干預的情況下就應將當前控制焦點定位在待輸入的輸入欄上;如果輸入欄在一般情況下不需要更改其中的內容,則應直接將焦點定在“確定”按鈕上;在幾個輸入欄之間應支持tab,shift+tab切換操作,“確定”和“取消”應該是切換操作的終點,與具體所在位置無關。


          ?


          2.???可用Enter(或Ctrl+Enter)鍵提交,確保和點擊提交按鈕的效果是相同的?


          不要在提交按鈕上加入onClick=”…”這樣的JavaScript代碼。?


          用Enter 鍵提交頁面是原則1的自然延伸,而且這也是瀏覽器所缺省支持的。只所以單獨列出來是因為實際上有些設計者設計的頁面不能達到這種效果,結果導致使用 Enter鍵提交和點擊“確定”按鈕提交帶來的效果不一樣。大部分情況下是設計者在“確定”按鈕上加入了onClik=”…”這樣的代碼,通過點擊“確定”按鈕后,會執行一段JavaScript代碼,比如對某些hidden類型的input元素設值。而使用Enter鍵提交時就不會執行這段代碼。

          正確的做法是把這段代碼移到表單標簽中,以onSubmit=”…”屬性引入。

          posted on 2008-08-30 03:28 yunye 閱讀(427) 評論(0)  編輯  收藏 所屬分類: javascript

          主站蜘蛛池模板: 合水县| 庄河市| 兴山县| 庄浪县| 顺昌县| 务川| 来安县| 兴文县| 巴塘县| 玉溪市| 彭山县| 青河县| 平谷区| 曲周县| 剑川县| 长沙县| 璧山县| 汝阳县| 忻州市| 阳高县| 措勤县| 荆州市| 清苑县| 嘉禾县| 望都县| 上栗县| 宁蒗| 柳河县| 墨竹工卡县| 双牌县| 且末县| 定襄县| 金堂县| 当雄县| 车险| 孝义市| 和林格尔县| 施甸县| 西贡区| 山丹县| 太白县|