Devre dışı bırakılan girdilerin değerleri gönderilmez


Yanıtlar:


189

Evet, tüm tarayıcılar salt okunur oldukları için devre dışı girişleri göndermemelidir.

Daha fazla bilgi (bölüm 17.12.1)

Özellik tanımları

devre dışı [CI] Bir form denetimi için ayarlandığında, bu Boolean özelliği kullanıcı girişi denetimini devre dışı bırakır. Ayarlandığında, devre dışı niteliğinin bir öğe üzerinde aşağıdaki etkileri vardır:

  • Devre dışı bırakılan denetimler odak almaz.
  • Devre dışı bırakılmış denetimler sekme gezinmesinde atlanır.
  • Devre dışı bırakılan denetimler başarılı olamaz.

Şu öğeler devre dışı bırakılmış özniteliğini destekler: BUTTON, INPUT, OPTGROUP, OPTION, SELECT ve TEXTAREA.

Bu özellik devralınır, ancak yerel bildirimler devralınan değeri geçersiz kılar.

Devre dışı bırakılan öğelerin nasıl oluşturulacağı kullanıcı aracısına bağlıdır. Örneğin, bazı kullanıcı aracıları devre dışı bırakılan menü öğelerini, düğme etiketlerini vb. "Grileştirir".

Bu örnekte, INPUT öğesi devre dışıdır. Bu nedenle, kullanıcı girdisini alamaz ve değeri formla birlikte gönderilmez.

<INPUT disabled name="fred" value="stone">

Not. Devre dışı bırakılan özniteliğin değerini dinamik olarak değiştirmenin tek yolu bir komut dosyasıdır.


86
Çözüm: <input type="hidden">devre dışı bırakılan girdiyle aynı ada / değere sahip bir öğe eklemenizi sağlar .
John Kugelman

hangi tarayıcının hangi hangilerine uymadığı hakkında herhangi bir bilgi?
Allisone

82
bunun yerine readonly = "readonly" kullanın :) bkz. stackoverflow.com/questions/7357256/…
Adrien Be

1
@Allisone: Firefox ve Chrome buna uyuyor gibi görünüyor (devre dışı giriş gönderilmiyor). Hav başka tarayıcılarda denemedi.
Adrien Be

1
@JohnKugelman neden aynı isim? engelli olan yine de gönderilmeyecektir .. gizli
Arth

286

disabled girdi veri göndermez.

Şu özelliği kullanın readonly:

<input type="text" readonly />

Kaynak burada


@FrankFang, Tamam, ama Laravel kolektifinin blade şablonuna veri aktarırken. Çalışmaz. bu şekilde veri gönderemezsiniz.
ssi-anik

@ ssi-anik readonlyçalışır, sadece girişe "name" attr ilettiğinizden emin olun.
BenNov

26

Özürlüleri taklit etmek için üç şey kullanabilirsiniz:

  1. HTML: readonlyözniteliği (girişte bulunan değer form gönderimi için kullanılabilir. Ayrıca kullanıcı giriş değerini değiştiremez)

  2. CSS: 'pointer-events':'none'(kullanıcının girişi tıklamasını engeller)

  3. HTML: tabindex="-1"(kullanıcının klavyeden girişe gitmesini engelleme)


22

Gönderilmiyorlar, çünkü W3C spesifikasyonunda böyle diyor .

17.13.2 Başarılı kontroller

Başarılı bir kontrol, gönderim için "geçerlidir". [Kesik]

  • Devre dışı bırakılan denetimler başarılı olamaz.

Başka bir deyişle, spesifikasyon devre dışı bırakılan kontrollerin geçersiz kabul edildiğini ve gönderilmemesi gerektiğini söylüyor.


2

Disabledkontroller başarılı olamaz ve başarılı bir kontrol gönderimi için "geçerli" dir. Devre dışı bırakılan denetimlerin formu göndermemesinin nedeni budur.


1

İki yani nitelikleri vardır readonlyve disabledyarı salt okunur girişi yapabilirsiniz. Ancak aralarında küçük bir fark var.

<input type="text" readonly />
<input type="text" disabled />
  • readonlyÖzellik girdi metni devre dışı yapar ve kullanıcılar artık bunu değiştirmek mümkün değildir.
  • Bu disabledözellik yalnızca giriş metninizi devre dışı bırakacak (değiştirilemez) değil aynı zamanda gönderilemez .

jQuery yaklaşımı (1):

$("#inputID").prop("readonly", true);
$("#inputID").prop("disabled", true);

jQuery yaklaşımı (2):

$("#inputID").attr("readonly","readonly");
$("#inputID").attr("disabled", "disabled");

JavaScript yaklaşımı:

document.getElementById("inputID").readOnly = true;
document.getElementById("inputID").disabled = true;

PS disabledve readonlystandart html öznitelikleridir. propile tanıştırıldı jQuery 1.6.


0

salt seçili özelliklerde bile belirli kontroller tıklanabilir

yine de kontrolü devre dışı bırakmak istiyorsanız, ancak değerinin kaydedilmesini istiyorsanız. Gizli bir alan oluşturmayı düşünebilirsiniz. kontrolünüzle aynı değerde.

sonra bir değişiklik jquery oluşturun

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
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.