Jquery kullanırken .change
, bir de input
giriş odağını kaybettiğinde olay sadece tetiklenir
Benim durumumda, giriş değeri değiştirilir değişmez servisi aramam gerekiyor (değerin geçerli olup olmadığını kontrol et). Bunu nasıl başarabilirim?
Jquery kullanırken .change
, bir de input
giriş odağını kaybettiğinde olay sadece tetiklenir
Benim durumumda, giriş değeri değiştirilir değişmez servisi aramam gerekiyor (değerin geçerli olup olmadığını kontrol et). Bunu nasıl başarabilirim?
Yanıtlar:
Açıklama ve örnek için GÜNCELLENDİ
örnekler: http://jsfiddle.net/pxfunc/5kpeJ/
Yöntem 1. input
olayı
Modern tarayıcılarda input
etkinliği kullanın . Bu olay, kullanıcı bir metin alanına yazarken, yapıştırma, geri alma, temelde değer bir değerden diğerine her değiştiğinde tetiklenir.
JQuery bunu böyle yapmak
$('#someInput').bind('input', function() {
$(this).val() // get the current value of the input field.
});
jQuery 1.7 başlayarak yerine bind
sahip on
:
$('#someInput').on('input', function() {
$(this).val() // get the current value of the input field.
});
Yöntem 2. keyup
olayı
Eski tarayıcılar için keyup
etkinliği kullanın (bu, klavyedeki bir tuş serbest bırakıldığında tetiklenir, bu etkinlik bir tür yanlış pozitif verebilir çünkü "w" serbest bırakıldığında giriş değeri değiştirilir ve keyup
olay tetiklenir. "shift" tuşu serbest bırakıldığında keyup
olay tetiklenir, ancak girişte herhangi bir değişiklik yapılmamıştır.). Ayrıca, kullanıcı bağlam menüsünden sağ tıklar ve yapıştırırsa bu yöntem kullanılmaz:
$('#someInput').keyup(function() {
$(this).val() // get the current value of the input field.
});
Yöntem 3. Zamanlayıcı ( setInterval
veya setTimeout
)
Sınırlamaların üstesinden gelmek keyup
için, değerde bir değişiklik belirlemek üzere girişin değerini düzenli olarak kontrol edecek bir zamanlayıcı ayarlayabilirsiniz. Bu zamanlayıcı kontrolünü yapmak için setInterval
veya setTimeout
düğmesini kullanabilirsiniz . Bu SO sorusunun işaretli cevabına bakın: jQuery metin kutusu değişiklik olayı veya belirli bir giriş alanı için zamanlayıcıyı başlatmak ve durdurmak için focus
ve blur
olaylarını kullanarak çalışan bir örnek için kemanı görün
innerText
veya value
öznitelikte (kullanıcı girdisini simüle eden) bir JS kodu değişikliği bir MutationObserver olayını tetikleyecek jsfiddle.net/pxfunc/ 04chgpws / 1 (MutationObserver olay günlüğü için console.log dosyasına bakın). Bakabileceğim farklı bir test vakanız var mı?
HTML5'iniz varsa:
oninput
(yalnızca bir değişiklik gerçekleştiğinde tetiklenir, ancak hemen gerçekleşir)Aksi takdirde, giriş öğesinin değerinde bir değişiklik olduğunu gösterebilecek tüm bu olayları kontrol etmeniz gerekir:
onchange
onkeyup
( Değil keydown
veya keypress
giriş alanının değeri henüz yeni tuş olmaz gibi)onpaste
(desteklendiğinde)ve belki:
onmouseup
(Bundan emin değilim)HTML5 ile ve jQuery kullanmadan, input
etkinliği kullanabilirsiniz :
var input = document.querySelector('input');
input.addEventListener('input', function()
{
console.log('input changed to: ', input.value);
});
Girişin metni her değiştiğinde tetiklenir.
IE9 + ve diğer tarayıcılarda desteklenir.
Burada bir jsFiddle'da canlı deneyin .
Diğerlerinin önerdiği gibi, durumunuzdaki çözüm birden fazla olayı koklamaktır .
Bu işi yapan eklentiler genellikle aşağıdaki olayları dinler:
$ input . açık ( 'keydown keypress keyup mousedown click mouseup' , işleyiciyi değiştir );
Uygun olabileceğini düşünüyorsanız focus
, blur
ve diğer etkinlikleri de ekleyebilirsiniz .
Dinlemek için olayları aşmamanızı öneririm, çünkü tarayıcı belleğine kullanıcının davranışına göre yürütmek için daha fazla prosedür yükler.
Uyarı: bir giriş öğesinin değerini JavaScript ile değiştirmenin (örn. JQuery .val()
yöntemiyle) yukarıdaki olaylardan hiçbirini tetiklemeyeceğini unutmayın.
(Referans: https://api.jquery.com/change/ ).
.val()
örneğin bir giriş alanındaki bir değişiklik olayı için ilgili eylemi çağırabilirsiniz, böyle bir şey yaparsınız ... $('#element').val(whatever).change()
Öğenin içinde bir şey değiştiğinde etkinliğin tetiklenmesini istiyorsanız, keyup etkinliğini kullanabilirsiniz .
onchange
, durumu kendiniz kullanmanız veya izlemeniz gerekir. keydown
etkinleştiği çünkü çalışmıyor önce girişin durumu değişti alır.
//. blur öğe odak kaybettiğinde tetiklenir
$('#target').blur(function() {
alert($(this).val());
});
// Manuel olarak tetiklemek için şunu kullanın:
$('#target').blur();
Giriş HTML Öğeleri ile kullanabileceğiniz keyup ve keypress gibi jQuery olayları vardır . Ayrıca blur () olayını da kullanabilirsiniz.
keypress
olay sırasında bir girişin değerini güvenilir bir şekilde kontrol edemezsiniz çünkü basılı tuş henüz bu değeri değiştirmez.