Tuş vuruşlarını kontrol etmek yalnızca kısmi bir çözümdür, çünkü bir giriş alanının içeriğini fare tıklamaları kullanarak değiştirmek mümkündür. Bir metin alanına sağ tıklarsanız, bir tuşa basmadan değeri değiştirmek için kullanabileceğiniz kes ve yapıştır seçeneklerine sahip olursunuz. Benzer şekilde, otomatik tamamlama etkinleştirilmişse, bir alana sol tıklayabilir ve önceden girilen metnin bir açılır menüsünü görüntüleyebilir ve bir fare tıklaması kullanarak seçimleriniz arasından seçim yapabilirsiniz. Tuş bindirme, bu tür değişiklikleri algılamayacaktır.
Ne yazık ki, en azından bildiğim kadarıyla, değişiklikleri rapor eden bir "onchange" olayı yok. Ancak her durumda işe yarayan bir çözüm vardır: setInterval () kullanarak bir zamanlama olayı ayarlayın.
Giriş alanınızın bir kimliği ve "şehir" adı olduğunu varsayalım:
<input type="text" name="city" id="city" />
"Şehir" adında genel bir değişkene sahip olun:
var city = "";
Bunu sayfa başlatma işleminize ekleyin:
setInterval(lookForCityChange, 100);
Ardından bir lookForCityChange () işlevi tanımlayın:
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
Bu örnekte, ihtiyaçlarınıza göre ayarlayabileceğiniz "şehir" değeri her 100 milisaniyede bir kontrol edilmektedir. İsterseniz, lookForCityChange () 'i tanımlamak yerine anonim bir işlev kullanın. Kodunuzun ve hatta tarayıcının giriş alanı için bir başlangıç değeri sağlayabileceğini unutmayın, böylece kullanıcı herhangi bir şey yapmadan önce bir "değişiklik" konusunda bilgilendirilebilirsiniz; kodunuzu gerektiği gibi ayarlayın.
Saniyenin onda birinde bir zamanlama olayının kapanması fikri belirsiz görünüyorsa, zamanlayıcıyı giriş alanı odağı aldığında başlatabilir ve bir bulanıklık olduğunda (clearInterval () ile) sonlandırabilirsiniz. Odağı almadan bir girdi alanının değerini değiştirmenin mümkün olduğunu sanmıyorum, bu nedenle zamanlayıcıyı bu şekilde açıp kapatmak güvenli olmalı.