HTML form giriş alanları için devre dışı = "devre dışı" ve salt okunur = "salt okunur" arasındaki fark nedir?


435

Bu konuda biraz okudum, ancak farklı tarayıcıların şeylere nasıl davrandığı hakkında sağlam bir şey bulamıyorum.


related: "seçme etiketi için salt okunur özniteliği nasıl taklit edebilir ve yine de POST verilerini alabilirim?" stackoverflow.com/questions/368813/…
Adrien

Yanıtlar:


728

Bir readonlyöğe sadece düzenlenebilir değildir, ancak ilgili gönderildiğinde gönderilir form. Bir disabledöğe düzenlenemez ve gönderildiğinde gönderilmez. Diğer bir fark, readonlyelemanların odaklanamaması (ve bir form aracılığıyla "sekme" yaparken odaklanabilmesidir), disabledelemanların yapamamasıdır .

Bu harika makalede veya w3c'nin tanımında bunun hakkında daha fazla bilgi edinin . Önemli kısmı alıntılamak için:

Temel Farklılıklar

Devre dışı özniteliği

  • Devre dışı bırakılan form öğelerinin değerleri işlemci yöntemine iletilmez. W3C bunu başarılı bir öğe olarak adlandırır. (Bu, işaretlenmemiş form onay kutularına benzer.)
  • Bazı tarayıcılar, devre dışı bırakılmış form öğeleri için geçersiz kılınabilir veya varsayılan stil sağlayabilir. (Gri renkli veya kabartma) Internet Explorer 5.5 bu konuda özellikle kötü.
  • Devre dışı bırakılan form öğeleri odak almaz.
  • Devre dışı bırakılan form öğeleri sekme gezinmesinde atlanır.

Salt Okunur Özelliği

  • Tüm form öğelerinin salt okunur bir özniteliği yoktur. En kayda değer <SELECT>, <OPTION>ve<BUTTON> elementler salt okunur niteliklerini yok (her ikisi de engelli özelliklerini olmasına rağmen)
  • Tarayıcılar, form öğesinin salt okunur olduğu varsayılan geçersiz kılınmış görsel geri bildirim sağlamaz. (Bu bir sorun olabilir… aşağıya bakın.)
  • Salt okunur özniteliği ayarlanmış form öğeleri form işlemcisine aktarılır.
  • Odaklanabilen salt okunur form öğeleri
  • Sekmeli gezinmeye salt okunur form öğeleri dahil edilir.

5
salt okunur öğede CTRL + C kullanamazsınız, ancak sağ fare tıklamasıyla Kopyala'yı seçebilirsiniz.
Rumplin

7
@Rumplin bundan emin misin? Az önce test ettim ve OS X'te Chrome'daki klavye kısayoluyla kopyalayabildim.
evanrmurphy 09

5
Msgstr "Tüm form öğelerinin salt okunur bir özniteliği yoktur. En önemlisi, <SEÇ>, <SEÇENEK> ve <DÜĞME> öğelerinin salt okunur öznitelikleri yoktur (her ikisinin de devre dışı öznitelikleri olmasına rağmen)". Bu nedenle bazen belirli formlar için gizli bir giriş alanı ile "devre dışı" niteliğini kullanmanız gerekir.
Donato

Chrome'un geçerli sürümünde salt okunur öğeler odak alamaz. Kullanıcıların giriş boyutundan daha uzun değerler arasında kaydırma yapabilmelerini bekliyorsanız bu sorunludur.
Mike Feltman

5
Dolayısıyla benim disabled ima ettiğim readonlyfakat readonlyima etmediğim anlayışım disabled. Başka bir deyişle, bir öğenin disabledözniteliği varsa, readonlyözniteliği de eklemeye gerek yoktur . Doğru?
chharvey

91

Öğe özelliği devre dışı bırakıldığında hiçbir olay tetiklenmez.

Aşağıdakilerin hiçbiri tetiklenmeyecektir.

$("[disabled]").click( function(){ console.log("clicked") });//No Impact
$("[disabled]").hover( function(){ console.log("hovered") });//No Impact
$("[disabled]").dblclick( function(){ console.log("double clicked") });//No Impact

Bence salt okunur olarak tetiklenir.

$("[readonly]").click( function(){ console.log("clicked") });//log - clicked
$("[readonly]").hover( function(){ console.log("hovered") });//log - hovered
$("[readonly]").dblclick( function(){ console.log("double clicked") });//log - double clicked

35

Devre Dışı, form gönderildiğinde bu form öğesinden hiçbir veri gönderilmeyeceği anlamına gelir. Salt okunur, öğenin içindeki verilerin gönderileceği anlamına gelir, ancak kullanıcı tarafından değiştirilemez.

Örneğin:

<input type="text" name="yourname" value="Bob" readonly="readonly" />

Bu, "adınız" öğesi için "Bob" değerini gönderir.

<input type="text" name="yourname" value="Bob" disabled="disabled" />

Bu, "adınız" öğesi için hiçbir şey göndermez.


6
Her ikisi de readonlyve disabledmantıksal değerlerdir. (Salt okunur olarak) disabledyerine kullanındisabled="disabled"
Raptor

5
Her ikisi de anlamsal olarak doğrudur. HTML5 her ikisini de kullanmanızı sağlar.
Michael Irigoyen

3
Değerler olmadan yalnızca öznitelik adlarını kullanmak için bağlamsız uyarma kötü amaçlı olarak önerilir - çünkü kod geçerli XML / XHTML olmayacaktır. Birçok geliştiricinin bunlarla ilgilenmediğini biliyorum, ama en azından tuzaklardan haberdar olmalılar. Şahsen XHTML uyumu için gayret ediyorum - henüz almadım, zorlayıcı bir neden belirtmedikçe - bu yüzden uzun / çoğaltılmış formu kullanıyorum.
underscore_d

1
@ToolmakerSteve Boş dizelerin geçerli XHTML olduğuna dair spesifik bir alıntı var mı? Yalnızca HTML5 için geçerli olduğunu söyleyen yorum sayfalarını bulabilirim. XHTML hakkında konuşurken gördüğüm herkes, boole özellikleri için formunun olması gerektiğini söylüyor attrname="attrname". Her iki durumda da, en azından bulabildiğim kadar iyi belgelenmiş görünmüyor. Peki, bu var - w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 - ama sadece XHTML'den değil SGML ve HTML'den bahsediyor .... çok fazla kısaltma: S
underscore_d

1
... ancak varlığın / yokluğun yeterli olduğu HTML için biraz atlamak - bunu elde ediyoruz, ki bu muhtemelen XHTML'ye Boolean attributes may legally take a single value: the name of the attribute itself (e.g., selected="selected").dahil edilmediğinde geçerli : Yani boş dize geçerli görünmüyor.
underscore_d


1

Bir form temizlendiğinde (sıfırlandığında) devre dışı bırakılmış bir metin kutusunun değerinin korunması gerekirse disabled = "disabled", salt okunur metin kutusu değeri tutmayacağından kullanılmalıdır.

Örneğin:

HTML

Metin kutusu

<input type="text" id="disabledText" name="randombox" value="demo" disabled="disabled" />

Yeniden başlatma tuşu

<button type="reset" id="clearButton">Clear</button>

Yukarıdaki örnekte, Sil düğmesine basıldığında, devre dışı bırakılmış metin değeri formda korunur. Değer,input type = "text" readonly="readonly"

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.