<input> öğesine "salt okunur" özellik nasıl eklenir?


301

readonlyBelirli bir gruba nasıl ekleyebilirim <input>? .attr('readonly')çalışmıyor.


2
.attr ('salt okunur', gerçek) işler, diğer dont
Qiao

3
.attr ('salt okunur', 'salt okunur') da çalışır
Qiao

3
Hangi DOCTYPE'ı kullandığınıza bağlıdır. HTML 4.01 DTD'ler için CMS'nin yanıtı geçerli ve geçerli bir HTML 4.01. Bir XHTML DTD kullanıyorsanız, ceejayoz'un cevabı çalışır ve geçerli XHTML'dir.
bjoernwibben

2
Doktipe bağlı değildir, DOM HTML veya XML yoluyla okunmuş olup olmadığı ile aynıdır ve her durumda XHTML IE uyumluluğu için neredeyse her zaman aslında XML değil HTML olarak sunulur.
bobince

Yanıtlar:


545

jQuery <1.9

$('#inputId').attr('readonly', true);

jQuery 1.9+

$('#inputId').prop('readonly', true);

Prop ve attr arasındaki fark hakkında devamını oku


1
Emin misiniz? Ben de öyle düşündüm ama özellikleri hakkında hiçbir şey bulamıyorum. <input name = "foo" readonly = "readonly" value = "bar" /> validator.w3.org'da xhtml 1.0 katı ile mükemmel bir şekilde doğrular.
Jonas Stensved

17
Bu gönderi, jQuery API'sında belirtildiği gibi .attr () yerine .prop () olarak değiştirilmelidir: jquery.com/upgrade-guide/1.9/#attr-versus-prop-
frshca

Salt okunur öznitelik bir "boolean özniteliğidir" - whatwg.org/specs/web-apps/current-work/#boolean-attribute Biraz yanıltıcı isme rağmen, değerler "doğru" veya "yanlış" olmamalıdır. Yukarıdaki kodun gerçekten işe yarayacağını düşünüyorum (Chrome'da jQuery 1.8.1 ile test edildi), deneyimsiz olanlar için daha sonra karışıklığa yol açabilir. Ayrıca, jQuery belgelerine göre değer bir boole değil sayı veya dize olmalıdır. api.jquery.com/attr/#attr2
Luke

151

$ .Prop () kullanın

$("#descrip").prop("readonly",true);

$("#descrip").prop("readonly",false);

8
.Prop için jQuery API'sini okuduktan sonra, bu kabul edilen cevap olmalıdır. Geçmişte her zaman .attr ('salt okunur', 'salt okunur') ve .removeAttr ('salt okunur') yaptım, ancak bu daha doğru gibi görünüyor ve kodu daha temiz hale getiriyor.
evan w

4
Herkes bu cevabı burada belirtildiği gibi kullanmalıdır: jquery.com/upgrade-guide/1.9/#attr-versus-prop-
frshca

4
Kullanarak Bir uyarı $.prop(): Prop için nitelik seçici kullanan herhangi CSS sahip olması eğer öyleyse, boş / boş bir dizeye salt okunur özelliğini ayarlar [readonly="readonly"]sonra sen bunu değiştirmek gerekecek, [readonly](ya da her ikisini de).
Luke

28

Readonly, html'de tanımlandığı gibi bir özelliktir, bu yüzden ona bir gibi davranın.

Düzenlenebilir olmamasını istiyorsanız, üzerinde çalıştığınız nesnede readonly = "readonly" gibi bir şeye sahip olmanız gerekir. Ve tekrar düzenlenebilir olmasını istiyorsanız, readonly = '' gibi bir şeye sahip olmayacaksınız (doğru anladıysam bu standart değil). Gerçekten bir bütün olarak özniteliği kaldırmanız gerekir.

Bu nedenle, jquery'yi ekleyerek ve kaldırarak mantıklı olan şeydir.

Salt okunur bir şey ayarlayın:

$("#someId").attr('readonly', 'readonly');

Salt okunur:

$("#someId").removeAttr('readonly');

Bu benim için gerçekten işe yarayan tek alternatifti. Umarım yardımcı olur!


20

.attr('readonly', 'readonly')hile yapmalı. Sizin .attr('readonly')sadece bir tane set vermez değeri döndürür.


16
jQuery's attr (), adlar aksini ima etse bile HTML özellikleri üzerinde değil, JavaScript özellikleri üzerinde çalışır. attr ('salt okunur') aslında boolean olan DOM Düzeyi 1 HTML özelliği readOnly üzerinde çalışır, bu nedenle 'true' daha uygundur. Bununla birlikte, 'salt okunur' dizesi otomatik olarak bir boole dönüştürüldüğünde gerçek bir değerdir, bu nedenle yukarıdakiler hala çalışır.
bobince

Özniteliği 'true' olarak ayarlamak istediğinizi sanmıyorum. .attrDeğer sadece jQuery docs göre, bir dize veya sayı değil, bir boolean olmalıdır: api.jquery.com/attr/#attr2 Ayrıca HTML "boolean nitelikler" Yalnızca boş dize veya özelliğinin değeri olmalıdır. Bence çözüm .prop()karışıklığı önlemek için kullanmaktır .
Luke

16

"Devre dışı" girişinin POST'ta gönderilmesini hariç tuttuğunu düşünüyorum


4
Evet öyle. Ben sadece bu nedenle "devre dışı" için bir alternatif ararken bu konu bulundu.
Jonas Stensved

ancak göndermeden hemen önce etkinleştirebilir ve daha sonra devre dışı bırakabilirsiniz $ (document). gerektirir} çalışır i test
Geomorillo

Html'deki salt okunur giriş değerlerinin gizli kullanılmadan POST'ta gönderilmesine izin veriliyor mu?
Ajay Takur

12

.RemoveAttr komutunu kullanarak salt okunur işlevi devre dışı bırakabilirsiniz;

$('#descrip').removeAttr('readonly');

5

Salt okunur olarak etkinleştirmek için:

$("#descrip").attr("readonly","true");

Salt okunur olarak devre dışı bırakmak için

$("#descrip").attr("readonly","");

Gönderen api.jquery.com/attr "jQuery 1.6 ile .attr () metodu ayarına geri dönülür olmamıştır öznitelikler için tanımsız. Almak ve bu şekilde değişim DOM özellikleri, kontrol seçilen veya form elemanlarının özürlü devlet için, .prop () yöntemini kullanın. "
David Clarke

1
Öznitelik "true" dizesine ayarlanmamalıdır. Bu işe yarayabilir, ancak teknik olarak doğru değildir. (Yukarıdaki önceki yorumlarıma bakın.)
Luke

Bu öneriyi kullanmayın, burada çok daha iyi öneriler var. "true" ayarı doğru değil ve kaldırma da yanlış.
MiFiHiBye

4

SetAttribute özelliğini kullanın. Örnek 1'i seçerseniz, salt okunur özniteliği metin kutusuna uygularsanız, aksi takdirde özniteliği salt okunur olarak kaldırın.

http://jsfiddle.net/baqxz7ym/2/

document.getElementById("box1").onchange = function(){
  if(document.getElementById("box1").value == 1) {
    document.getElementById("codigo").setAttribute("readonly", true);
  } else {
    document.getElementById("codigo").removeAttribute("readonly");
  }
};

<input type="text" name="codigo" id="codigo"/>

<select id="box1">
<option value="0" >0</option>
<option value="1" >1</option>
<option value="2" >2</option>
</select>

-4

JQuery sürüm <1.9 için:

$('#inputId').attr('disabled', true);

JQuery sürümü> = 1.9 için:

$('#inputId').prop('disabled', true);
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.