Bir girdi türü nasıl devre dışı bırakılır = metin?


123

textMümkünse, JavaScript kullanan bir girdi alanına yazmayı devre dışı bırakmak istiyorum . Giriş alanı bir veritabanından doldurulur; bu yüzden kullanıcının değerini değiştirmesini istemiyorum.

Yanıtlar:


172

Bunu sayfa görüntülendiğinde biliyorsanız, ki bu sizin gibi görünmektedir çünkü veritabanının bir değeri vardır, JavaScript yerine işlendiğinde onu devre dışı bırakmak daha iyidir. Bunu yapmak için, readonlyözniteliği (veya disabledform gönderiminden de kaldırmak istiyorsanız) <input>şunun gibi ekleyin :

<input type="text" disabled="disabled" />
//or...
<input type="text" readonly="readonly" />

81
Bunun neden oy aldığını bilmiyorum, soruya cevap vermiyor. JavaScript yanıtlarını bekliyorduk.
Sophie

3
@Sophie, soruyu soran kişinin durumuna göre bunu yapmasının en doğru yoludur, belki de bir başlık değişikliği sıralıdır.
Nick Craver

6
devre dışı mod, giriş kutusundaki tıklama olaylarını engeller, salt okunur değildir. Bilginize.
2014

"Salt okunur" giriş alanını "devre dışı bırakılmış" alanı gibi BAKMAK için, 'style = "color: gray; background-color: # F0F0F0;"' olarak ayarlayın. (bu, bu cevaba yapılan bir
Jake Toronto

2
Tarayıcıların "devre dışı" veya "salt okunur" özniteliğini göz ardı etmekte özgür olduğunu ve verilerin güncellenmesini güvenilir bir şekilde önlemek için bu yönteme güvenilmemesi gerektiğini unutmayın ... eğer formu işleyen sunucu tarafı kodu yine de kabul edecekse bu alandan bir değer ve güncelleme, kendi formunu oluşturmak için yeterince bilgili olan herkes bu "devre dışı bırakma" yı atlayabilir ... bu, yalnızca güvenilir bir ortamda kullanıcı arabirimi kolaylığı içindir. Bunu önlemenin gerçek yolu sunucu tarafı mantığıdır.
Aaron Wallentine

206
document.getElementById('foo').disabled = true;

veya

document.getElementById('foo').readOnly = true;

readOnlyFirefox'ta (magic) düzgün çalışması için camelCase'de olması gerektiğini unutmayın .

Demo: https://jsfiddle.net/L96svw3c/ - disabledve arasındaki farkı biraz açıklıyor readOnly.


3
Bu benim için çalıştı. Jquery sürümü $ ['input']. Prop ('devre dışı', doğru)
Daniel Sun Yang

Buna yedi yıl geç kaldım ama 2017'de bu ikisi arasında anlamsal bir fark var mı?
Jules

2
Hiç geç kalmadınız, sihir hala orada (: O zamanlar hangi platformlarda test ettiğimi hatırlamıyorum, ancak bugün readonly(küçük harf) Ubuntu'daki Firefox 52'de hala çalışmıyor - deve durumda olmalı.
hudolejev

Bu neden benim için çalışmıyor? İle bir inputöğe yaptım id="gate"ve kodunuzu denedim, bu benim için işe yaramıyor gibi görünüyor ...
Voldemort's Wrath

21

Veri veritabanından doldurulur ise, düşünebilirsiniz değil bir kullanarak <input>görüntülemek için etiket. Yine de, bunu doğrudan etiketinde devre dışı bırakabilirsiniz:

<input type='text' value='${magic.database.value}' disabled>

Daha sonra Javascript ile devre dışı bırakmanız gerekirse, "devre dışı" özelliğini ayarlayabilirsiniz:

document.getElementById('theInput').disabled = true;

Değeri bir olarak göstermemeyi önermemin nedeni <input>, deneyimlerime göre yerleşim sorunlarına neden olmasıdır. Metin uzunsa, bir <input>kullanıcının metni denemesi ve kaydırması gerekecektir, bu normal insanların yapmayı tahmin edeceği bir şey değildir. Onu bir <span>veya başka bir şeye bırakırsanız, daha fazla şekillendirme esnekliğine sahip olursunuz.


3
Unutmayın, devre dışı bırakmanın metni bazı tarayıcılarda neredeyse okunamaz hale getirebileceğini unutmayın. Salt okunur özniteliğiyle daha iyi durumda olabilirsiniz, örneğin <input type = "text" value = "foo" salt okunur>
Olly Hodgson

7

Ayrıca jquery ile şunları da yapabilirsiniz:

$('#foo')[0].disabled = true;

Çalışma örneği:

$('#foo')[0].disabled = true;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="foo" placeholder="placeholder" value="value" />


1
@Chani Poz jquery nesnesi üzerinde native js setter çağırıyorsunuz, hata ile sonuçlanacaktır. $ ('# foo'] [0] .disabled = true veya $ ('# foo']. get (0) .disabled = true işi yapacak
Arek Kostrzeba

6

Giriş kutunuza istediğiniz gibi bir referans alın (örneğin document.getElementById('mytextbox')) ve readonlyözelliğini şu şekilde ayarlayın true:

myInputBox.readonly = true;

Alternatif olarak, bu özelliği satır içi olarak ekleyebilirsiniz (JavaScript gerekmez):

<input type="text" value="from db" readonly="readonly" />

HTML yazıyorsanız (XHTML'nin aksine), bu <input type = "text" value = "from db" readonly> olacaktır
Olly Hodgson
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.