Sử dụng CSS text-transform: uppercase
không thay đổi đầu vào thực tế mà chỉ thay đổi giao diện của nó. Nếu bạn gửi dữ liệu đầu vào đến một máy chủ thì nó vẫn sẽ viết thường hoặc tuy nhiên bạn đã nhập nó. Để thực sự chuyển đổi giá trị đầu vào, bạn cần thêm mã javascript như dưới đây:
document.querySelector("input").addEventListener("input", function(event) {
event.target.value = event.target.value.toLocaleUpperCase()
})
<input>
Ở đây tôi đang sử dụng toLocaleUpperCase()
để chuyển đổiinput
giá trị thành chữ hoa. Nó hoạt động tốt cho đến khi bạn cần chỉnh sửa những gì bạn đã nhập, ví dụ: nếu bạn đã nhập ABCXYZ và bây giờ bạn cố gắng thay đổi nó thành ABCLMNXYZ, nó sẽ trở thành ABCLXYZMN vì sau mỗi lần nhập, con trỏ sẽ nhảy đến cuối.
Để khắc phục bước nhảy này của con trỏ, chúng ta phải thực hiện các thay đổi sau trong chức năng của mình:
document.querySelector("input").addEventListener("input", function(event) {
var input = event.target;
var start = input.selectionStart;
var end = input.selectionEnd;
input.value = input.value.toLocaleUpperCase();
input.setSelectionRange(start, end);
})
<input>
Bây giờ mọi thứ hoạt động như mong đợi, nhưng nếu bạn có PC chậm, bạn có thể thấy văn bản nhảy từ chữ thường sang chữ hoa khi bạn nhập. Nếu điều này làm bạn khó chịu, đây là lúc sử dụng CSS, áp dụng input: {text-transform: uppercase;}
cho tệp CSS và mọi thứ sẽ ổn.