Jquery kullanırken .change, bir de inputgiriş 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 inputgiriş 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. inputolayı
Modern tarayıcılarda inputetkinliğ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 bindsahip on:
$('#someInput').on('input', function() {
$(this).val() // get the current value of the input field.
});
Yöntem 2. keyupolayı
Eski tarayıcılar için keyupetkinliğ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 keyupolay tetiklenir. "shift" tuşu serbest bırakıldığında keyupolay 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ı ( setIntervalveya setTimeout)
Sınırlamaların üstesinden gelmek keyupiç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 setIntervalveya setTimeoutdüğ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 focusve blurolaylarını kullanarak çalışan bir örnek için kemanı görün
innerTextveya 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 keypressgiriş 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, inputetkinliğ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, blurve 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. keydownetkinleş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.
keypressolay 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.