這篇文章給大家分享的是有關(guān)如何使HTML5數(shù)字輸入僅接受整數(shù)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計體驗!已為廣告制作等企業(yè)提供專業(yè)服務(wù)。
整體概念是合理的:使用HTML 5屬性來限制可以發(fā)送到服務(wù)器的內(nèi)容,然后使用Javascript增強它,以限制用戶可以在第一個地方輸入的內(nèi)容。
所以讓我們來看看這些問題,并更好地實現(xiàn)它。
問題1,不好的腳本
最常見的缺陷是缺乏適當(dāng)?shù)慕导壒δ堋? 如果您要在“electron”或“nw.js”中構(gòu)建完整的堆棧應(yīng)用程序,那很好,但是這種形式的東西通常在面向公眾的網(wǎng)站中沒有位置。
就像我經(jīng)常說的那樣,高質(zhì)量的腳本應(yīng)該增強已經(jīng)在工作的頁面,而不是用戶使用它的唯一方法。
解決辦法?
使用 pattern 和 step 屬性來限制有效內(nèi)容。
問題2,正則表達(dá)式模式錯誤或不完整
人們最常用的模式是 [-/ d] *,它的問題是允許在任何地方都減號。 雖然肯定可以使用 type = “number” 來解決問題,但這不是一個好選擇。 截取按鍵時更是如此,因為減號只能是第一個字符。
它還可能出現(xiàn)問題,因為某些實現(xiàn)“不是”正則表達(dá)式,這會導(dǎo)致誤報。
解決辦法?
對于HTML,使用更好的表達(dá)式:^[- d]\d*$ 更加健壯和準(zhǔn)確。減號可以是匹配開始的第一個字符,然后是零個或多個小數(shù),直到字符串結(jié)束。
對于JavaScript,只使用正則表達(dá)式來測試數(shù)字,并應(yīng)用一些更實用的邏輯來檢測其他值。
簡單易行!
問題3,在標(biāo)記中使用事件屬性
我知道在JSX垃圾中,有大量的用嘴呼吸的人在鼓勵這一點,但如果你在寫vanilla或其他系統(tǒng),請出于對圣誕節(jié)的愛,從1997年的直腸中取出你的頭顱。
將 “onkeypress” 或 “onchange” 放在標(biāo)記中意味著錯失了一次緩存機會,也違反了分離關(guān)注的原則。以這種方式將 JavaScript 放進(jìn)標(biāo)記中,就像在 HTML 4 Strict 中被廢棄的所有東西一樣,愚蠢得令人發(fā)指。就像如果你要用 “text-white box-shadow col-4-s” 這樣的屬性在你的HTML上撒尿一樣,請你承認(rèn)失敗,然后回到寫HTML 3.2的時候,用所有那些FONT / CENTER標(biāo)簽、COLOR、BGCOLOR、SIZE、BORDER和ALIGN屬性,以及 "用于布局的表格 "來寫,你們似乎都很清楚地、很珍視地錯過了。
這也意味著您沒有完整/適當(dāng)?shù)氖录幚沓绦蛟L問權(quán)限。
解決辦法?
Element.addEventListener,請使用它!
問題4,必須對每個輸入進(jìn)行硬編碼
無論是通過問題3將事件屬性放到標(biāo)記中,還是通過手動獲取唯一ID來捕獲它們,我?guī)缀鯖]有發(fā)現(xiàn)可以實際使用即插即用的標(biāo)記應(yīng)用程序的代碼庫!
解決辦法?
document.querySelectorAll('input[type="number”][step="1"]') 給我們提供所有我們想要的整數(shù)輸入,所以我們可以增強它。
問題5,一些腳本阻止使用導(dǎo)航控制和正常編輯!
通過攔截并只允許減號和0...9,它們可以防止退格鍵、回車鍵、制表鍵、箭頭、刪除、插入等等等等。并不是所有的瀏覽器都會把這些作為 event.key 發(fā)送,這要看你鉤住的是什么事件。比如 “keypress” 事件在Firefox和Chrome中會過濾掉一些,以免破壞正常的表單使用,但 “老Edge” 和Safari不會,“keydown” 則什么也不過濾。
解決辦法?
因為 “keypress” 事件跨瀏覽器不一致,所以用keydown代替。那么我們就可以利用所有控制鍵在 Event.key 值中返回多個字符的事實,我們只需要檢查 Event.key.length>1 就可以說 “繼續(xù)允許這些”。
正如前面所提到的,我們所需要的只是一個簡單的輸入,在不使用JavaScript的情況下,它首先具有盡可能多的功能!
HTML:
<input type="number" step="1" pattern="^[-/d]/d*$">
只接受整數(shù),如果你想只接受正數(shù),可以換成 pattern="/d+”
JavaScript:
然后我們可以使用JavaScript來限制用戶的輸入,這樣人們甚至不允許輸入無效值。
(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中以隔離范圍。 然后,抓取我們要在頁面上掛接的所有輸入,并創(chuàng)建我們的正則表達(dá)式。
我在事件開始處而不是在事件內(nèi)部創(chuàng)建正則表達(dá)式,這樣我們就不用浪費時間在每個該死的按鍵上創(chuàng)建它。這就是匿名函數(shù)可能帶來開銷的地方,也是需要告訴那些“函數(shù)式程序員”和他們的“副作用”廢話的地方。
循環(huán)遍歷所有輸入,并為它們分配事件處理程序。
上述處理程序只是檢查我們的返回情況。像箭頭、退格鍵、回車鍵等控制鍵都會返回完整的文字來描述它們,所以如果event.key的長度>1,我們就不要阻止這些。
如果它是一個負(fù)號和第一個字符,通過return允許它。
如果它是一個數(shù)字,通過return允許它。
如果都不是,請阻止該事件。
Live Demo
這是一個代碼本,它包括幾個文本字段和多個整數(shù)和非整數(shù)的數(shù)字字段,所以你可以看到它確實只鉤住了我們想要的字段。
https://codepen.io/jason-knight/pen/QWGyrwq
懸而未決的問題
我可能會考慮添加的一件事是掛鉤“change”事件來攔截粘貼,但由于“pattern”屬性不允許提交無效的值,所以應(yīng)該沒有問題。
感謝各位的閱讀!關(guān)于“如何使HTML5數(shù)字輸入僅接受整數(shù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)站題目:如何使HTML5數(shù)字輸入僅接受整數(shù)
當(dāng)前路徑:http://vcdvsql.cn/article44/ppheee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、企業(yè)網(wǎng)站制作、網(wǎng)頁設(shè)計公司、靜態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)