Bu yüzden Temani Afif'in kırpma maskesini kullanma hakkındaki cevabını seviyorum. Harika olduğunu düşün. Başka bir çözüm önermek istedim (biraz daha az zarif). Bu sorunu test etmek için Firefox'u kullandım ve metin alanının dışına tıklamak (odak kaybı) 1. basamak tekrar görünmez veya oradaki metin girişinde dize normale döner.
Sorunun ayarladığınız harf aralığı css özniteliği letter-spacing: 31px;olduğuna inanıyorum : ve bunun çoğu tarayıcının sahip olduğu "yanıp sönen" caret için geçerli olacağına inanıyorum. Chrome kullanıldığında, odağı kaybettiğinde bunu kaldırırken, Firefox odağı kaybettikten sonra bile bunu koruyor.
İlk çözüm, girişin odağı kaybetmesi için blur () işlevini manuel olarak çağırmaktı. Chrome'da çalışır (Kendi Kendini Yürüten Anonim İşlev kullanarak):
<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" >
hatta number_text girdisinin şu şekilde çağırdığı bir Tanımlı İşlev olarak:
<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()" ... >
Chrome'da küçük bir gecikme göreceksiniz, ancak Firefox'ta bunu çağırmak sorunu çözmeyecek.
Aynı davranışı Firefox'ta da zorlayabiliriz. Biraz oynadıktan sonra, Chrome'un harf aralığını bir bulanıklıkta yenilediğini / yeniden hesapladığını düşündüm. Oyun oturumum, Firefox'u bu değeri programlı olarak yeniden hesaplamaya zorlayabileceğinizi gösterdi:
- Girişin harf aralığı özelliğinin satır içi stilini farklı bir değere değiştirin (bir belgenin stil bölümüne tüm stil etiketini yeniden yazmak gibi, çok çaba harcamadan number_text CSS sınıfını programsal olarak düzenleyemediğimiz için).
- Class number_text öğesini girişten kaldırın.
- 1 ve 2 değiştirilebilir, sınıf özniteliklerini 'bellekte' kaydetmeden yalnızca ayarladığınız satır içi stile geri dönmek için Firefox'a ihtiyacınız vardır.
- Satır içi stili kaldırın ve number_text CSS sınıfını yeniden uygulayın. Bu, tarayıcıyı, gerektiğinde harf ayrımını yeniden hesaplamaya zorlar.
Kodda, aşağıdaki JavaScript işlevi gibi görünecektir:
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
}
}
Firefox'ta Chrome ile aynı titreşime sahip olacak ve hepsi iyi olacak.
Not : Zaman aşımı işlevleri tarayıcıya yenilenmesi için zaman tanımak ve gerçekten ihtiyacımız olanı güncellemektir.
Not : Metin kutusunun odağı kaybetmesini sağlamak için işlevde .blur () öğesini çağırmayı seçebilir veya bunu atlayabilirsiniz ve bunlar basamaklarda hata olmadan yine de giriş alanında olacaktır.
Umarım bu, kavramsal anlayışın yanı sıra sorunu çözmenize yardımcı olur. Diğer bazı bireyler, titreme olayından kaçınan ve hem Firefox hem de Chrome'da çalışan iyi çözümler verdi!