2011-01-29 12 views
6

Bir girdinin (type = text) öğesinin içeriğinin (değeri) boyutunun üzerinde olup olmadığını algılamanın bir yolu var mı?Bir girişteki (type = text) öğedeki metnin FireFox'taki sınırları aşıp aşmadığını tespit edin.

Internet Explorer'da, özelliği, bu doğru olduğunda style.width'dan büyük olacaktır. Ancak Firefox'ta, scrollWidth her zaman style.width'a eşittir ve bilinen bir hatadır (https://bugzilla.mozilla.org/show_bug.cgi?id=343143), belki de hata değildir, çünkü Mozilla basitçe bir giriş öğesinin "kaydırılabilir" olduğunu düşünmez, ancak yine de. Bu düşünceyle uyumlu olarak, Firefox'un textarea öğesi DOES, içerik sınırları aştığında scrollWidth özelliğini doğru şekilde ayarladı. (a) her nasılsa veya (b) girişin her keyUp olayda, benzer içeriğini kopyalamak yerine textarea elemanı kullanın ve tek satır girişine sınırlamak:

Şu anda, benim tek düşünce ya üzeresiniz şekilli div elemanı ve özelliğine bakın.

Bunu FF'de başarmanın daha iyi bir yolu var mı?

+0

Metin kutusunun 'length' özniteliğiyle dizenin 'length'unu karşılaştırmaya ne dersiniz? – drudge

+0

@jnpcl - Yalnızca sabit genişlikli bir yazı tipi kullanılıyorsa ve 'input' öğesinde css stili kullanılıyorsa bu işe yarar. Değişken genişlikli yazı tipi veya "input" öğesinin genişliğini açıkça tanımlamak istediğiniz durumlarda (ör. "Style =" width: 100px; "), uzunluğun kontrol edilmesi yeterli olmaz. – userx

cevap

9

Dizenin uzunluğunu piksel olarak ölçüyorsanız ne olur? o zaman girdinin genişliğini onunla karşılaştırabilirsiniz.
Bir dizgenin piksel uzunluğunu jquery: Determine Pixel Length of String in Javascript/jQuery? ile nasıl edinebilirsiniz.
Ben böyle bir şey yapsın: Bu eski-imsi soru olduğunu biliyorum

 
function inputExceeded(el){ 
    var s = $('<span >'+el.val()+'</span>'); 
    s.css({ 
     position : 'absolute', 
     left : -9999, 
     top : -9999, 
     // ensure that the span has same font properties as the element 
     'font-family' : el.css('font-family'), 
     'font-size' : el.css('font-size'), 
     'font-weight' : el.css('font-weight'), 
     'font-style' : el.css('font-style') 
    }); 
    $('body').append(s); 
    var result = s.width() > el.width(); 
    //remove the newly created span 
    s.remove(); 
    return result; 
} 
+0

Bu cevabı beğeniyorum, ancak bir çözümün ne kadar güvenilir olduğuna dair bir fikrin var mı? JQuery'nin width() işlevinin neye baktığını bilmiyorum (CSS'nin style.width, offsetWidth, clientWidth, vb.), Ancak bazı CSS özelliklerinin bir değeri olmayacağını biliyorum. ayarlayın. – userx

-1

, ama belki bu kimse yardımcı olacaktır. Girilen metin girişin genişliğinden daha genişse jQuery 'kaydırma' olayını tetikler. Ne yazık ki, metin girişine JavaScript ile enjekte edilirse 'kaydırma' olayı tetiklenmez. Ayrıca, kullanıcı metni indirdiğinde bu örnek girişi daralmaz.

$('input[type=text]').on('scroll.input-expander', function(event, element){ 
    $(this).css('width','100%'); 
    $(this).unbind('scroll.input-expander'); 
}); 

Düzenleme: Sadece imleç girişi kenarından öteye gittiğinde kaydırma olayı sadece tetiklenir fark etti.

İlgili konular