最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

HTML5數(shù)字輸入僅接受整數(shù)的實(shí)現(xiàn)代碼

  發(fā)布時(shí)間:2021-03-16 10:45:32   作者:佚名   我要評(píng)論
這篇文章主要介紹了HTML5數(shù)字輸入僅接受整數(shù)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

這兩年我看到很多關(guān)于這方面的文章和帖子,這的確是一個(gè)非常方便的東西。但是,太多的實(shí)現(xiàn)還是有漏洞,殘缺不全的實(shí)現(xiàn),等等。

整體概念是合理的:使用 HTML 5 屬性來(lái)限制可以發(fā)送到服務(wù)器的內(nèi)容,然后使用 Javascript 增強(qiáng)它,以限制用戶(hù)可以在第一個(gè)地方輸入的內(nèi)容。

所以讓我們來(lái)看看這些問(wèn)題,并更好地實(shí)現(xiàn)它。

問(wèn)題 1,不好的腳本

最常見(jiàn)的缺陷是缺乏適當(dāng)?shù)慕导?jí)功能。 如果您要在“electron”或“nw.js”中構(gòu)建完整的堆棧應(yīng)用程序,那很好,但是這種形式的東西通常在面向公眾的網(wǎng)站中沒(méi)有位置。

就像我經(jīng)常說(shuō)的那樣,高質(zhì)量的腳本應(yīng)該增強(qiáng)已經(jīng)在工作的頁(yè)面,而不是用戶(hù)使用它的唯一方法。

解決辦法?

使用 pattern 和 step 屬性來(lái)限制有效內(nèi)容。

問(wèn)題 2,正則表達(dá)式模式錯(cuò)誤或不完整

人們最常用的模式是 [-/ d] * ,它的問(wèn)題是允許在任何地方都減號(hào)。 雖然肯定可以使用 type = “number” 來(lái)解決問(wèn)題,但這不是一個(gè)好選擇。 截取按鍵時(shí)更是如此,因?yàn)闇p號(hào)只能是第一個(gè)字符。

它還可能出現(xiàn)問(wèn)題,因?yàn)槟承?shí)現(xiàn)“不是”正則表達(dá)式,這會(huì)導(dǎo)致誤報(bào)。

解決辦法?

對(duì)于 HTML,使用更好的表達(dá)式: ^[- d]\d*$ 更加健壯和準(zhǔn)確。減號(hào)可以是匹配開(kāi)始的第一個(gè)字符,然后是零個(gè)或多個(gè)小數(shù),直到字符串結(jié)束。

對(duì)于 JavaScript,只使用正則表達(dá)式來(lái)測(cè)試數(shù)字,并應(yīng)用一些更實(shí)用的邏輯來(lái)檢測(cè)其他值。

簡(jiǎn)單易行!

問(wèn)題 3,在標(biāo)記中使用事件屬性

我知道在 JSX 垃圾中,有大量的用嘴呼吸的人在鼓勵(lì)這一點(diǎn),但如果你在寫(xiě) vanilla 或其他系統(tǒng),請(qǐng)出于對(duì)圣誕節(jié)的愛(ài),從 1997 年的直腸中取出你的頭顱。

將 “onkeypress” 或 “onchange” 放在標(biāo)記中意味著錯(cuò)失了一次緩存機(jī)會(huì),也違反了分離關(guān)注的原則。以這種方式將 JavaScript 放進(jìn)標(biāo)記中,就像在 HTML 4 Strict 中被廢棄的所有東西一樣,愚蠢得令人發(fā)指。就像如果你要用 “text-white box-shadow col-4-s” 這樣的屬性在你的 HTML 上撒尿一樣,請(qǐng)你承認(rèn)失敗,然后回到寫(xiě) HTML 3.2 的時(shí)候,用所有那些 FONT / CENTER 標(biāo)簽、COLOR、BGCOLOR、SIZE、BORDER 和 ALIGN 屬性,以及 “用于布局的表格 “來(lái)寫(xiě),你們似乎都很清楚地、很珍視地錯(cuò)過(guò)了。

這也意味著您沒(méi)有完整/適當(dāng)?shù)氖录幚沓绦蛟L問(wèn)權(quán)限。

解決辦法?

Element.addEventListener ,請(qǐng)使用它!

問(wèn)題 4,必須對(duì)每個(gè)輸入進(jìn)行硬編碼

無(wú)論是通過(guò)問(wèn)題 3 將事件屬性放到標(biāo)記中,還是通過(guò)手動(dòng)獲取唯一 ID 來(lái)捕獲它們,我?guī)缀鯖](méi)有發(fā)現(xiàn)可以實(shí)際使用即插即用的標(biāo)記應(yīng)用程序的代碼庫(kù)!

解決辦法?

document.querySelectorAll('input[type="number”][step="1"]') 給我們提供所有我們想要的整數(shù)輸入,所以我們可以增強(qiáng)它。

問(wèn)題 5,一些腳本阻止使用導(dǎo)航控制和正常編輯!

通過(guò)攔截并只允許減號(hào)和 0…9,它們可以防止退格鍵、回車(chē)鍵、制表鍵、箭頭、刪除、插入等等等等。并不是所有的瀏覽器都會(huì)把這些作為 event.key 發(fā)送,這要看你鉤住的是什么事件。比如 “keypress” 事件在 Firefox 和 Chrome 中會(huì)過(guò)濾掉一些,以免破壞正常的表單使用,但 “老 Edge” 和 Safari 不會(huì),“keydown” 則什么也不過(guò)濾。

解決辦法?

因?yàn)?“keypress” 事件跨瀏覽器不一致,所以用 keydown 代替。那么我們就可以利用所有控制鍵在 Event.key 值中返回多個(gè)字符的事實(shí),我們只需要檢查 Event.key.length>1 就可以說(shuō) “繼續(xù)允許這些”。

正如前面所提到的,我們所需要的只是一個(gè)簡(jiǎn)單的輸入,在不使用 JavaScript 的情況下,它首先具有盡可能多的功能!

HTML:

<input type="number" step="1" pattern="^[-/d]/d*$" />

只接受整數(shù),如果你想只接受正數(shù),可以換成 pattern="/d+”

JavaScript:

然后我們可以使用 JavaScript 來(lái)限制用戶(hù)的輸入,這樣人們甚至不允許輸入無(wú)效值。

(function() {
  var integers = document.querySelectorAll(
      'input[type="number"][step="1"]'
    ),
    intRx = /\d/;

  for (var input of integers) {
    input.addEventListener("keydown", integerChange, false);
  }

  function integerChange(event) {
    if (
      event.key.length > 1 ||
      (event.key === "-" &&
        event.currentTarget.value.length === 0) ||
      intRx.test(event.key)
    )
      return;
    event.preventDefault();
  }
})();

我們首先將其包裝在 IIFE 中以隔離范圍。 然后,抓取我們要在頁(yè)面上掛接的所有輸入,并創(chuàng)建我們的正則表達(dá)式。

我在事件開(kāi)始處而不是在事件內(nèi)部創(chuàng)建正則表達(dá)式,這樣我們就不用浪費(fèi)時(shí)間在每個(gè)該死的按鍵上創(chuàng)建它。這就是匿名函數(shù)可能帶來(lái)開(kāi)銷(xiāo)的地方,也是需要告訴那些“函數(shù)式程序員”和他們的“副作用”廢話的地方。

循環(huán)遍歷所有輸入,并為它們分配事件處理程序。

上述處理程序只是檢查我們的返回情況。像箭頭、退格鍵、回車(chē)鍵等控制鍵都會(huì)返回完整的文字來(lái)描述它們,所以如果 event.key 的長(zhǎng)度>1,我們就不要阻止這些。

如果它是一個(gè)負(fù)號(hào)和第一個(gè)字符,通過(guò) return 允許它。

如果它是一個(gè)數(shù)字,通過(guò) return 允許它。

如果都不是,請(qǐng)阻止該事件。

Live Demo

這是一個(gè)代碼本,它包括幾個(gè)文本字段和多個(gè)整數(shù)和非整數(shù)的數(shù)字字段,所以你可以看到它確實(shí)只鉤住了我們想要的字段。

https://codepen.io/jason-knight/pen/QWGyrwq

懸而未決的問(wèn)題

我可能會(huì)考慮添加的一件事是掛鉤“change”事件來(lái)攔截粘貼,但由于“pattern”屬性不允許提交無(wú)效的值,所以應(yīng)該沒(méi)有問(wèn)題。

結(jié)論

多想想用戶(hù)可能會(huì)輸入錯(cuò)誤的東西,以及如何處理,但也要記住用戶(hù)可能輸入的所有其他東西,而這些東西與值本身沒(méi)有關(guān)系。

請(qǐng)始終注意,許多用戶(hù)會(huì)主動(dòng)阻止腳本編寫(xiě),或者出于安全或可訪問(wèn)性的原因讓腳本在 UA 中不可用。增強(qiáng)而不是取代你的基本功能!

計(jì)劃將這些東西應(yīng)用到所有這些字段,而不是從一開(kāi)始就只使用單個(gè)元素。

留意低效率,例如如何多次生成用作回調(diào)的匿名函數(shù)……或如何將腳本放入標(biāo)記中會(huì)錯(cuò)失跨頁(yè)面或重新訪問(wèn)的緩存機(jī)會(huì)。

做了這些事情之后,實(shí)現(xiàn)這樣簡(jiǎn)單的功能就不會(huì)再來(lái)困擾您或惹惱用戶(hù)了。

到此這篇關(guān)于HTML5數(shù)字輸入僅接受整數(shù)的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)HTML5數(shù)字輸入整數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • HTML5實(shí)現(xiàn)的移動(dòng)端購(gòu)物車(chē)自動(dòng)結(jié)算功能示例代碼

    本文介紹HTML5實(shí)現(xiàn)移動(dòng)端購(gòu)物車(chē)自動(dòng)結(jié)算,通過(guò)WebStorage、事件監(jiān)聽(tīng)、DOM操作等技術(shù),確保實(shí)時(shí)更新與數(shù)據(jù)同步,優(yōu)化性能及無(wú)障礙性,提升用戶(hù)體驗(yàn),感興趣的朋友一起看看吧
    2025-06-18
  • HTML5 中的<button>標(biāo)簽用法和特征

    在HTML5中,<button>標(biāo)簽用于定義一個(gè)可點(diǎn)擊的按鈕,它是創(chuàng)建交互式網(wǎng)頁(yè)的重要元素之一,本文將深入解析HTML5中的<button>標(biāo)簽,詳細(xì)介紹其屬性、樣式以及實(shí)際
    2025-06-18
  • 基于 HTML5 Canvas 實(shí)現(xiàn)圖片旋轉(zhuǎn)與下載功能(完整代碼展示)

    本文將深入剖析一段基于 HTML5 Canvas 的代碼,該代碼實(shí)現(xiàn)了圖片的旋轉(zhuǎn)(90 度和 180 度)以及旋轉(zhuǎn)后圖片的下載功能,通過(guò)對(duì)代碼的解讀,我們可以學(xué)習(xí)到如何利用 Canvas API
    2025-06-18
  • HTML5 getUserMedia API網(wǎng)頁(yè)錄音實(shí)現(xiàn)指南示例小結(jié)

    本教程將指導(dǎo)你如何利用這一API,結(jié)合Web Audio API,實(shí)現(xiàn)網(wǎng)頁(yè)錄音功能,從獲取音頻流到處理和保存錄音,整個(gè)過(guò)程將逐步詳解,此外,還討論了getUserMedia API的使用限制和最
    2025-06-16
  • HTML5 搜索框Search Box詳解

    HTML5的搜索框是一個(gè)強(qiáng)大的工具,能夠有效提升用戶(hù)體驗(yàn),通過(guò)結(jié)合自動(dòng)補(bǔ)全功能和適當(dāng)?shù)臉邮?,可以?chuàng)建出既美觀又實(shí)用的搜索界面,這篇文章給大家介紹HTML5 搜索框Search Box
    2025-06-13
  • 全面解析HTML5中Checkbox標(biāo)簽

    Checkbox是HTML5中非常重要的表單元素之一,通過(guò)合理使用其屬性和樣式自定義方法,可以為用戶(hù)提供豐富多樣的交互體驗(yàn),這篇文章給大家介紹HTML5中Checkbox標(biāo)簽的深入全面解
    2025-06-13
  • HTML5無(wú)插件拖拽圖片上傳功能實(shí)現(xiàn)過(guò)程

    本實(shí)例展示了一種基于HTML5技術(shù)的圖片上傳功能,無(wú)需外部插件即可通過(guò)拖放圖片實(shí)現(xiàn)上傳,涉及到HTML5的拖放API和File API,以及使用CSS來(lái)增強(qiáng)用戶(hù)界面的交互性和視覺(jué)反饋,
    2025-05-16
  • HTML5 定位大全之相對(duì)定位、絕對(duì)定位和固定定位

    在HTML5和CSS中,定位(positioning)是控制元素在頁(yè)面上位置的重要機(jī)制,主要有四種定位方式:靜態(tài)定位(static)、相對(duì)定位(relative)、絕對(duì)定位(absolute)和固定定位(fixed),
    2025-05-13
  • HTML5中的Microdata與歷史記錄管理詳解

    Microdata作為HTML5新增的一個(gè)特性,它允許開(kāi)發(fā)者在HTML文檔中添加更多的語(yǔ)義信息,以便于搜索引擎和瀏覽器更好地理解頁(yè)面內(nèi)容,本文將探討HTML5中Microdata的使用方法以及
    2025-04-21
  • HTML5表格語(yǔ)法格式詳解

    在HTML語(yǔ)法中,表格主要通過(guò)< table >、< tr >和< td >3個(gè)標(biāo)簽構(gòu)成,本文通過(guò)實(shí)例代碼講解HTML5表格語(yǔ)法格式,感興趣的朋友一起看看吧
    2025-04-21

最新評(píng)論

清水县| 彭州市| 勐海县| 左贡县| 宁武县| 铜山县| 广东省| 潼关县| 盐山县| 锡林郭勒盟| 平湖市| 鹰潭市| 聊城市| 南丰县| 虞城县| 杭州市| 青浦区| 九江县| 临沭县| 侯马市| 遵化市| 淳化县| 贵溪市| 富裕县| 尼勒克县| 滨州市| 芜湖县| 河西区| 安宁市| 抚松县| 靖远县| 河东区| 普格县| 兴化市| 和硕县| 桂平市| 乌拉特前旗| 伊金霍洛旗| 江孜县| 无为县| 边坝县|