十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      屏蔽字符和對來自剪貼板上內容在文本框過濾操作方法

      百恒網絡 2017-02-06 7136

      我們經常會要求用戶在文本框中輸入特定的數據,或者輸入特定格式的數據。例如,必須包含某些 字符,或者必須匹配某種模式。由于文本框在默認情況下沒有提供多少驗證數據的手段,因此必須使用 JavaScript來完成此類過濾輸入的操作。而綜合運用事件和 DOM手段,就可以將普通的文本框轉換成能 夠理解用戶輸入數據的功能型控件。

      1. 屏蔽字符

      有時候,我們需要用戶輸入的文本中包含或不包含某些字符。例如,電話號碼中不能包含非數值字 符。如前所述,響應向文本框中插入字符操作的是 keypress 事件。因此,可以通過阻止這個事件的默 認行為來屏蔽此類字符。在極端的情況下,可以通過下列代碼屏蔽所有按鍵操作。

      EventUtil.addHandler(textbox, "keypress", function(event){

      event = EventUtil.getEvent(event);

      EventUtil.preventDefault(event);

      });

      運行以上代碼后,由于所有按鍵操作都將被屏蔽,結果會導致文本框變成只讀的。如果只想屏蔽特 定的字符,則需要檢測 keypress 事件對應的字符編碼,然后再決定如何響應。例如,下列代碼只允許 用戶輸入數值。

      EventUtil.addHandler(textbox, "keypress", function(event){

      event = EventUtil.getEvent(event);

      var target = EventUtil.getTarget(event);

      var charCode = EventUtil.getCharCode(event);

      if (!/d/.test(String.fromCharCode(charCode))){

      EventUtil.preventDefault(event); }

      });

      在這個例子中,我們使用 EventUtil.getCharCode()實現了跨瀏覽器取得字符編碼。然后,使 用 String.fromCharCode()將字符編碼轉換成字符串,再使用正則表達式 /d/ 來測試該字符串,從 而確定用戶輸入的是不是數值。如果測試失敗,那么就使用 EventUtil.preventDefault()屏蔽按鍵 事件。結果,文本框就會忽略所有輸入的非數值。

      雖然理論上只應該在用戶按下字符鍵時才觸發 keypress 事件,南昌網站建設公司百恒網絡前端工程師提醒大家,但有些瀏覽器也會對其他鍵觸發此 事件。Firefox 和 Safari(3.1 版本以前)會對向上鍵、向下鍵、退格鍵和刪除鍵觸發 keypress 事件; Safari 3.1及更新版本則不會對這些鍵觸發 keypress 事件。這意味著,僅考慮到屏蔽不是數值的字符還 不夠,還要避免屏蔽這些極為常用和必要的鍵。所幸的是,要檢測這些鍵并不困難。在 Firefox 中,所 有由非字符鍵觸發的 keypress 事件對應的字符編碼為 0,而在 Safari 3以前的版本中,對應的字符編 碼全部為 8。為了讓代碼更通用,只要不屏蔽那些字符編碼小于 10的鍵即可。故而,可以將上面的函數 重寫成如下所示。

      EventUtil.addHandler(textbox, "keypress", function(event){

      event = EventUtil.getEvent(event);

      var target = EventUtil.getTarget(event);

      var charCode = EventUtil.getCharCode(event);

      if (!/d/.test(String.fromCharCode(charCode)) && charCode > 9){

      EventUtil.preventDefault(event);

      } });

      這樣,我們的事件處理程序就可以適用所有瀏覽器了,即可以屏蔽非數值字符,但不屏蔽那些也會 觸發 keypress 事件的基本按鍵。

      除此之外,還有一個問題需要處理:復制、粘貼及其他操作還要用到 Ctrl 鍵。在除 IE 之外的所有 瀏覽器中,前面的代碼也會屏蔽 Ctrl+C、Ctrl+V,以及其他使用 Ctrl的組合鍵。因此,后還要添加一 個檢測條件,以確保用戶沒有按下 Ctrl鍵,如下面的例子所示。

      EventUtil.addHandler(textbox, "keypress", function(event){

      event = EventUtil.getEvent(event);

      var target = EventUtil.getTarget(event);

      var charCode = EventUtil.getCharCode(event);

      if (!/d/.test(String.fromCharCode(charCode)) && charCode > 9 && !event.ctrlKey){

      EventUtil.preventDefault(event); }

      });

      經過后一點修改,就可以確保文本框的行為完全正常了。在這個例子的基礎上加以修改和調整, 就可以將同樣的技術運用于放過和屏蔽任何輸入文本框的字符。

      2. 操作剪貼板

      IE是第一個支持與剪貼板相關事件,以及通過 JavaScript訪問剪貼板數據的瀏覽器。IE的實現成為 了事實上的標準,不僅 Safari 2、Chrome和 Firefox 3也都支持類似的事件和剪貼板訪問(Opera不支持通過 JavaScript訪問剪貼板),HTML 5后來也把剪貼板事件納入了規范。下列就是 6個剪貼板事件。

      beforecopy:在發生復制操作前觸發。

      copy:在發生復制操作時觸發。

      beforecut:在發生剪切操作前觸發。

      cut:在發生剪切操作時觸發。

      beforepaste:在發生粘貼操作前觸發。

      paste:在發生粘貼操作時觸發。

      由于沒有針對剪貼板操作的標準,這些事件及相關對象會因瀏覽器而異。在 Safari、Chrome和 Firefox 中,beforecopy、beforecut 和 beforepaste 事件只會在顯示針對文本框的上下文菜單(預期將發 生剪貼板事件)的情況下觸發。但是,IE則會在觸發 copy、cut 和 paste 事件之前先行觸發這些事件。 至于 copy、cut 和 paste 事件,只要是在上下文菜單中選擇了相應選項,或者使用了相應的鍵盤組合 鍵,所有瀏覽器都會觸發它們。

      在實際的事件發生之前,通過 beforecopy、beforecut 和 beforepaste 事件可以在向剪貼板發 送數據,或者從剪貼板取得數據之前修改數據。不過,取消這些事件并不會取消對剪貼板的操作——只 有取消 copy、cut 和 paste 事件,才能阻止相應操作發生。

      要訪問剪貼板中的數據,可以使用 clipboardData 對象:在 IE中,這個對象是 window 對象的 屬性;而在 Firefox 4+、Safari和 Chrome中,這個對象是相應 event 對象的屬性。但是,在 Firefox、 Safari和 Chorme中,只有在處理剪貼板事件期間 clipboardData 對象才有效,這是為了防止對剪貼板 的未授權訪問;在 IE 中,則可以隨時訪問 clipboardData 對象。為了確??鐬g覽器兼容性,好只 在發生剪貼板事件期間使用這個對象。

      這個 clipboardData 對象有三個方法:getData()、setData()和 clearData()。其中,getData() 用于從剪貼板中取得數據,它接受一個參數,即要取得的數據的格式。在 IE中,有兩種數據格式:"text" 和"URL"。在 Firefox、Safari 和 Chrome 中,這個參數是一種 MIME 類型;不過,可以用"text"代表 "text/plain"。

      類似地,setData()方法的第一個參數也是數據類型,第二個參數是要放在剪貼板中的文本。對于 第一個參數,IE 照樣支持"text"和"URL",而 Safari 和 Chrome 仍然只支持 MIME 類型。但是,與 getData()方法不同的是,Safari和 Chrome的 setData()方法不能識別"text"類型。這兩個瀏覽器在 成功將文本放到剪貼板中后,都會返回 true;否則,返回 false。為了彌合這些差異,我們可以向 EventUtil 中再添加下列方法。

      var EventUtil = {

      //省略的代碼

      getClipboardText: function(event){

      var clipboardData = (event.clipboardData || window.clipboardData);

      return clipboardData.getData("text");

      },

      //省略的代碼

      setClipboardText: function(event, value){

      if (event.clipboardData){

      return event.clipboardData.setData("text/plain", value);

      } else if (window.clipboardData){

      return window.clipboardData.setData("text", value);

      } },

      //省略的代碼

      };

      這里的 getClipboardText()方法相對簡單;它只要確定 clipboardData 對象的位置,然后再 以"text"類型調用 getData()方法即可。相應地,setClipboardText()方法則要稍微復雜一些。在 取得clipboardData 對象之后,需要根據不同的瀏覽器實現為setData()傳入不同的類型(對于Safari 和 Chrome,是"text/plain";對于 IE,是"text")。

      在需要確保粘貼到文本框中的文本中包含某些字符,或者符合某種格式要求時,能夠訪問剪貼板是非 常有用的。例如,如果一個文本框只接受數值,那么就必須檢測粘貼過來的值,以確保有效。在 paste 事件中,可以確定剪貼板中的值是否有效,如果無效,就可以像下面示例中那樣,取消默認的行為。

      EventUtil.addHandler(textbox, "paste", function(event){

      event = EventUtil.getEvent(event);

      var text = EventUtil.getClipboardText(event);

      if (!/^d*$/.test(text)){

      EventUtil.preventDefault(event); }

      });

      在這里,onpaste 事件處理程序可以確保只有數值才會被粘貼到文本框中。如果剪貼板的值與正 則表達式不匹配,則會取消粘貼操作。Firefox、Safari和 Chrome只允許在 onpaste 事件處理程序中訪 問 getData()方法。

      由于并非所有瀏覽器都支持訪問剪貼板,所以更簡單的做法是屏蔽一或多個剪貼板操作。在支持 copy、cut 和 paste 事件的瀏覽器中(IE、Safari、Chrome和 Firefox 3及更高版本),很容易阻止這些 事件的默認行為。在 Opera中,則需要阻止那些會觸發這些事件的按鍵操作,同時還要阻止在文本框中 顯示上下文菜單。

      本文僅限內部技術人員學習交流,不得作于其他商業用途.希望此文對廣大技人員有所幫助。原創文章出自:南昌APP開發公司-百恒網絡 http://www.dgscpc.com/ 如轉載請注明出處!


      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      日韩高清在线高清免费| freesexvideos精品老师毛多| 91天堂素人精品系列网站| 亚洲精品乱码久久久久66| 久久se精品一区精品二区国产| 日韩成人在线免费视频| 麻豆一区二区三区精品视频| 亚洲精品国产成人片| 中文字字幕在线精品乱码app| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 日韩精品亚洲专区在线影视| 99在线精品视频观看免费| 亚洲AV无码乱码麻豆精品国产| 久久精品中文闷骚内射| 久久精品国产福利电影网| 国产在线不卡午夜精品2021| 国产啪精品视频网站| 中日欧洲精品视频在线| 久久99精品久久久久久噜噜| 黑人无码精品又粗又大又长 | 亚洲精品人成网线在线播放va| 思99热精品久久只有精品| 国产精品亚洲高清一区二区| 亚洲精品视频在线观看你懂的| 日韩在线视频一区二区三区| 日韩尤物影院一二区| 制服丝袜日韩中文字幕在线| 亚洲中文字幕无码日韩| 日韩大片免费观看视频播放| 国产日韩在线视频免费播放| 国产91精品久久久久999| 国产一区二区精品在线观看| 日韩在线视频线视频免费网站| 国产伦精品一区二区三区免费迷| 国产精品久久久久国产精品三级 | 骚包在线精品国产美女| 国内精品久久久久影院免费| 亚洲国产第一站精品蜜芽| 久久精品国产亚洲AV麻豆不卡| 国产成人久久精品激情| 十八18禁国产精品www|