2013-04-17 17 views
5

Kullanıcının bazı verileri girmesi gereken bir metin kutumuz var. Ancak, bu veriler 500 karakteri geçmemelidir.Program boyutunda metin boyutunu değiştirme, değişiklik olayını önlüyor

 function keyupMaxLimit(obj, maxlen) { 
      if (parseInt(obj.value.length) > maxlen) { 
       $(obj).val($(obj).val().substr(0,maxlen)); 
      } 
     } 

Bu çalışıyor:: Biz KeyUp olayı çağrıda aşağıdaki işlevi uyguladığınızı başarılı amacıyla kullanıcı daha o gerekiyordu giremez. Değişiklikleri algılamak ve sihrimizi yapmak için aynı metin kutusunun Change olayıyla ilişkili bir işlevimiz de var.

$(document).on("change", "#myTextBox", function() { 
     //magic here 
    }); 

Bu ayrıca çalışıyor: kullanıcı metni değiştirdiğinde işlev çağrılıyor.

Ancak, bu bizim sorunumuz, bu iki işlev birlikte çalışmıyor. Örneğin, kullanıcı istediği daha fazla karakter getiriyorsa, ilk işlev metni kırpacak, ancak ikincisi çağrılmayacaktır!

İlk işlevdeki metin kutusuna yaptığımız değişikliklerin Change olayını önlediği/temizlediği görülmektedir. Bu doğru mu? Herhangi bir geçici çözüm var mı? İlk işlevdeki Change olayını açık bir şekilde tetikleyemiyorum çünkü gereksiz değişiklikler oluşturabilirdik.

DÜZENLEME - Bunu şu şekilde görebilirsiniz: http://jsfiddle.net/jpaires/dpujx/ Tarayıcı konsolunu açın ve metin kutusuna "12345" yazın. Etkinlik tetiklenir (konsolda "a-ok"). Ancak, "123456" yazarsanız, metin kesilir ve olay tetiklenmez (konsolda "a-ok" olmaz). Teşekkür Juhana :)

Ben artık şöyle html girdi karakter sayısını sınırlamak için bir denemelisiniz
+0

"Sihir" in sadece "keyupMaxLimit" (bu, 500) olduğunu varsayalım; Orada bir olay işleyici – Archer

+0

anahtarlık olayı bazı hatalar olabilir temizleyecektir orada bir şey yok ... lütfen bize bu kodu gösterecek ... de – Darshan

+0

@ Okçu Evet, öyle. Benim textarea etiketinde aşağıdaki gibi bir atribut var: onkeyup = "keyupMaxLimit (bu, 500); – jpaires

cevap

-3

: Bir şey metin giriş değişiklik yapmak istiyorsanız

<input type="text" id="Textbox" name="Textbox" maxlength="500" /> 

Diğer bir şeydir ve ben Bu gibi bu durumda da girişinde keyUp olayını kullanabilirsiniz düşünüyorum:

$(document).on("keyup", "#myTextBox", function() { 
//SOMETHING 
}); 

benim sugestion bu keman güncellenmiş ve onu çalışır ... http://jsfiddle.net/BdqDB/

Böylelikle her zaman günlüğü tetikler ve metin sınırlıdır.

diğer çözüm: Eğer jquery değişiklik belgelerine size işaretlerseniz

$(document).on("keyup", "#myTextBox", function() { 
    keyupMaxLimit(this,5); 
    console.log('other stuff'); 
}); 

http://jsfiddle.net/wTQa4/1/

bu çalışma bakınız: Eğer ben böyle yapacağını metni kesmek için işlevini kullanarak devam etmek istiyorsanız bulabilir:"Değişiklik olayı, öğenin değeri değiştiğinde bir öğeye gönderilir. Bu olay, öğeler, kutular ve öğelerle sınırlıdır. Seçili kutular, onay kutuları ve radyo düğmeleri için, olay kullanıcı hemen ile seçim fare, ancak diğer öğe türleri için olay odağı kaybedene kadar olay ertelenir. "

Sanırım bu sorunun cevabı, değişim olayı ile ne istediğinizi alamayacaksınız, size sorununuzu çözdüm ama geri bildirim göndermediniz ... Yapmamanız gereken diğer bir şey jQ yöntemlerini satır içi çağırmaktır, jQuery'yi kullandığınızda, olayları öğelere bağlamak çok kolaydır ve göze çarpmayan javascript, js yazmak için en iyi uygulamadır.

+0

Sadece yardım etmeye çalışmak, bir giriş yapmaktan kaçınmak için bir işlevden kaçınmak ve 3 oy aşağı almak ?! Çok ilginç .... – tbem

+0

Bu soruya cevap vermiyor. Alternatif rotalar önermek için tamam ama yorumlarda bunu yapmalısınız. Ayrıca cevaplarda da sorun yok ama asıl soruya da cevap vermelisiniz ("Kodunuz işe yaramaz çünkü bla blah, foo 'yu değiştirerek düzeltebilirsiniz, bununla birlikte en kolay yolu maxlength özniteliğini kullanmaktır." ") – JJJ

+0

Yine de işe yaramadığını buldum. Bu garip. – jpaires

İlgili konular