Vì vậy, tôi thích câu trả lời của Temani Afif về việc sử dụng mặt nạ cắt. Hãy nghĩ rằng nó thật tuyệt. Tôi muốn đề xuất một giải pháp khác (một chút kém thanh lịch). Tôi đã sử dụng Firefox để kiểm tra vấn đề này và nhấp vào bên ngoài vùng văn bản (mất tiêu điểm) sẽ không làm cho chữ số 1 xuất hiện lại hoặc chuỗi trở lại bình thường trong kiểu nhập văn bản ở đó.
Tôi tin rằng vấn đề là thuộc tính css khoảng cách chữ bạn đặt: letter-spacing: 31px;
và thực tế là tôi tin rằng điều này sẽ áp dụng cho dấu mũ "nhấp nháy" mà hầu hết các trình duyệt có. Sử dụng Chrome, nó dường như loại bỏ điều này khi mất tiêu điểm, trong khi Firefox vẫn giữ được điều này ngay cả sau khi mất tiêu điểm.
Giải pháp đầu tiên là sử dụng chức năng làm mờ thủ công () để làm cho đầu vào mất tiêu điểm. Điều này hoạt động trong Chrome (sử dụng Chức năng ẩn danh tự thực hiện):
<input type="text" id="number_text" maxlength="6" onkeyup="(function()
{
var x = document.getElementById('number_text');
let value = x.value
if (value.length >= 6){
x.blur()
return false
}
})();"
pattern="\d{6}" value="1234" >
hoặc thậm chí là một Hàm xác định được gọi bởi đầu vào number lòng như vậy:
<script>
handleMaxInput = function(){
var x = document.getElementById('number_text');
let value = x.value
if (value.length >= 6){
x.blur()
return false
}
};
</script>
<input ... id='number_text' ... onkeyup="handleMaxInput()" ... >
Bạn sẽ nhận thấy một chút chậm trễ trong Chrome, nhưng gọi điều này trong Firefox sẽ không giải quyết được vấn đề.
Về cơ bản chúng ta có thể ép buộc hành vi tương tự trong Firefox. Sau một vài lần chơi xung quanh, tôi nhận ra rằng Chrome đang làm mới / tính toán lại khoảng cách chữ cái trên một vệt mờ. Phiên chơi của tôi cho thấy rằng bạn có thể buộc Firefox tính toán lại giá trị này theo chương trình:
- Thay đổi kiểu nội tuyến của thuộc tính khoảng cách chữ cái của đầu vào thành một giá trị khác (vì chúng ta không thể chỉnh sửa một lớp CSS của numberSphere lập trình mà không cần nhiều nỗ lực, chẳng hạn như viết lại toàn bộ thẻ kiểu trong phần kiểu của tài liệu).
- Loại bỏ lớp number lòng khỏi đầu vào.
- 1 và 2 có thể hoán đổi cho nhau, bạn cần Firefox để dự phòng theo kiểu nội tuyến bạn đã đặt mà không lưu các thuộc tính lớp 'trong bộ nhớ'.
- Loại bỏ kiểu nội tuyến và áp dụng lại lớp CSS numberSphere. Điều này sẽ buộc trình duyệt tính toán lại chữ cái khi chúng ta cần.
Trong mã, nó sẽ trông giống như hàm JavaScript sau:
handleMaxInput = function(){
var x = document.getElementById('number_text');
let value = x.value
if (value.length >= 6){ // if the input is 6 or more characters
x.classList.remove('number_text') // remove the class
x.style.letterSpacing = '0px' // reset the spacing
setTimeout(function() { // set time to let browser refresh updates
x.classList.add('number_text') // Re-add class after browser refresh
setTimeout(function() { // Remove inline-style after more reculculations
x.style.removeProperty('letter-spacing') // Remove inline style to let class styles apply
x.blur // optional, will force input field to lose focus. Else comment out to avoid that.
}, (1)); // waits 1 millisecond
}, (1)); // waits 1 millisecond
}
}
Nó sẽ có cùng một nhấp nháy trong Firefox như với Chrome và tất cả đều ổn.
Lưu ý : Các chức năng hết thời gian là để cung cấp cho trình duyệt thời gian để làm mới và thực sự cập nhật những gì chúng ta cần.
Lưu ý : Bạn có thể chọn gọi .blur () trong hàm để làm cho hộp văn bản mất tiêu điểm hoặc bỏ qua điều đó và chúng sẽ vẫn ở trong trường nhập mà không gặp lỗi với các chữ số.
Hy vọng điều này sẽ giúp hiểu biết khái niệm của bạn, cũng như giải quyết vấn đề. Một số cá nhân khác đã đưa ra các giải pháp tốt để tránh toàn bộ sự cố nhấp nháy và hoạt động trong cả Firefox và Chrome!