JQuery'de giriş [type = text] değer değişimini algılama


159

Belirli bir giriş kutusunun değeri her değiştiğinde bir işlev yürütmek istiyorum. O neredeyse çalışır $('input').keyup(function), ancak örneğin kutuya metni yapıştırma hiçbir şey olmuyor. $input.change(function)yalnızca giriş bulanık olduğunda tetiklenir, bu nedenle bir metin kutusunun değeri her değiştiğinde nasıl bilebilirim?


2
Peki neden hiçbir bağlama hem keyupve pasteolaylar?
Ilia G

devcurry.com/2009/07/… - Kesme / kopyalama / yapıştırma olaylarını algılama
BeRecursive

2
@ liho1eye pastedüşündüğüm sadece bir tane, tüm farklı gelen yolları düşünmek yerine kesin bir değişiklik dinlemeyi tercih ederim.
Jeriko

@Jeriko Değerin değiştirilebileceği tek iki yol budur (js kodu ile açık güncellemenin yanında).
Ilia G

Ayrıca Ctlr-X'i ( cut) yakalamak istiyorsunuz .
Alexis Wilke

Yanıtlar:


344

'açık' öğesinin 'bağlama' işlevi üzerinde önerildiğini hatırlayın, bu yüzden her zaman böyle bir olay dinleyicisini kullanmaya çalışın:

$("#myTextBox").on("change paste keyup", function() {
   alert($(this).val()); 
});

Neden pasteolsa? İlk önce sadece bir şey yapıştırdığımızda işe yaradığını düşündüm CTRL+V.
Siyah

3
@ NicolasS.Xu: değerlerin doğrudan atanması herhangi bir DOM olayını tetiklemiyor
Alejandro Silva

Kullanmak console.log()yerine kullanmak daha iyi olurdu alert. Keyup için çok can sıkıcı olurdu alert.
cytsunny

4
@cytsunny evet, uyarı sinir bozucu, ancak bu durumda değer değişikliğinde yürütülecek kodun bir örneğidir, gerçekten istediğiniz herhangi bir yük olabilir.
Alejandro Silva

1
Sağ tıklayıp yapıştırırsanız, bu işlem yapıştırmadan önce giriş değerini döndürür.
18:42 tarihinde alstr

104

Açıklama

Bunu jQuery'nin .bind()yöntemini kullanarak yapabilirsiniz . Check jsFiddle .

Örneklem

Html

<input id="myTextBox" type="text"/>

jQuery

$("#myTextBox").bind("change paste keyup", function() {
   alert($(this).val()); 
});

Daha fazla bilgi



6

metin kutusu etkinliklerini de kullanabilirsiniz -

<input id="txt1" type="text" onchange="SetDefault($(this).val());" onkeyup="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">

function SetDefault(Text){
  alert(Text);
}

Bunu dene


5

Bunu dene:

Temel olarak, sadece her bir etkinliği hesaba katın:

Html:

<input id = "textbox" type = "text">

jQuery:

$("#textbox").keyup(function() { 
    alert($(this).val());  
}); 

$("#textbox").change(function() { 
alert($(this).val());  
}); 

3
$("#myTextBox").on("change paste keyup select", function() {
     alert($(this).val());
});

tarayıcı önerisi için seç


2

Bunu dene:

$("input").bind({
            paste : function(){
                $('#eventresult').text('paste behaviour detected!');
            }
})


0

Bu etkinlik kombinasyonu benim için çalıştı:

$("#myTextBox").on("input paste", function() {
   alert($(this).val()); 
});

0

THE UNUTMAYIN cutveya selectEVENTS!

Kabul edilen cevap neredeyse mükemmel, ama cutve selectolayları unutuyor .

cut kullanıcı metni kestiğinde tetiklenir (CTRL + X veya sağ tıklama ile)

select tarayıcı tarafından önerilen bir seçeneği belirlediğinde tetiklenir

Bunları da eklemelisiniz, örneğin:

$("#myTextBox").on("change paste keyup cut select", function() {
   //Do your function 
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.