div içindeki tüm form öğelerini devre dışı bırak


162

jquery / javascript içindeki yalnızca üst div adını söyleyerek tüm alanları (textarea / textfield / seçenek / giriş / onay kutusu / gönderme vb.) bir formda devre dışı bırakmanın bir yolu var mı?


4
Bunu yaparak, formu gönderirken bu öğelerin değerlerinin "kaybolmasına" neden olacağına dikkat edin - değeri korumak için onları readOnlydevre dışı bırakmayın.
Gölge Sihirbazı Senin İçin Kulak


1
Bir Fikir, tıklanmasına izin verdiği / önlediği denetimlerin önünde bir div, css ile stil devre dışı bırakılmış denetimleri gizleyebilir / gösterebilir.
Jaider

Yanıtlar:


261

:inputSeçiciyi bir üst seçiciyle birlikte kullanmayı deneyin :

$("#parent-selector :input").attr("disabled", true);

div içindeki tüm girişleri 0 değerine ayarlamak için bunu kullanabilir miyim?
jackson5

2
<a> Ayrıca ... 'ı da devre dışı bırakmak istiyorum
RAJ

7
Alıntı : jQuery : çünkü: input, bir jQuery uzantısıdır ve CSS belirtiminin bir parçası değildir,: using kullanan sorgular, yerel DOM querySelectorAll () yöntemi tarafından sağlanan performans artışından yararlanamaz. Elemanları seçmek için: input kullanırken en iyi performansı elde etmek için, önce saf CSS seçiciyi kullanarak elemanları seçin, ardından .filter (": input") kullanın.
acme

2
@acme:% 100 katılıyorum ancak soru hangi seçiciyi filtreleyebileceğime dair herhangi bir ipucu vermiyor. Bana verilen tek bilgi, kullanıcının bunu bir üst divadla yapabilmesi gerektiğiydi ve hepsi bu. Daha fazla bilgi verilirse daha etkili bir çözüm bulabilirdim.
Andrew Whitaker

1
.Attr () yerine .prop () kullanın (jquery 1.6'nın üstünde)
Akshay Gundewar

154
$('#mydiv').find('input, textarea, button, select').attr('disabled','disabled');

4
('girdi, textarea, düğme') olmalıdır, tüm seçiciler bir tırnak işareti ile alıntılanmalıdır. api.jquery.com/multiple-selector Bunu yaparak birden fazla argüman gönderiyorsunuz.
Ivan Ivanić

2
Bu, yalnızca girişleri bulur, textareas ve düğmeleri yok sayar. : Giriş seçici gitmenin yoludur, ancak bunları açıkça listelemek istiyorsanız, kullanmanız gerekir $('#mydiv').find('input, textarea, button').
Mark Hildreth

1
... veya sadece $ ('# formunuz'). children (). prop ('devre dışı', doğru);
walv

@ walv kodunuz yalnızca tüm form öğeleri formun tek bir soyundan geliyorsa çalışır. Find (), azalan seviyeden bağımsız olarak listedeki tüm öğeleri bulur. Bu kod satırı, yeni jquery sürümleri için attr yerine pervane kullanmak dışında doğrudur.
Chris O

32

1.6+ için jquery .prop()yerine .attr(),

$("#parent-selector :input").prop("disabled", true);

veya

$("#parent-selector :input").attr("disabled", "disabled");

2
haklısın ama bazı zaman pervane çalışmaları ve bazı zamanlar çalışmıyor, özellikle onay kutusu ve radyo düğmesi nedeniyle
damon

Bu eski bir iş parçacığı olduğunu fark, ama bu daktilo kullanırken bazı hatalar başladı
Simon Price

5
    $(document).ready(function () {
        $('#chkDisableEnableElements').change(function () {
            if ($('#chkDisableEnableElements').is(':checked')) {
                enableElements($('#divDifferentElements').children());
            }
            else {
                disableElements($('#divDifferentElements').children());
            }
        });
    });

    function disableElements(el) {
        for (var i = 0; i < el.length; i++) {
            el[i].disabled = true;

            disableElements(el[i].children);
        }
    }

    function enableElements(el) {
        for (var i = 0; i < el.length; i++) {
            el[i].disabled = false;

            enableElements(el[i].children);
        }
    }

4

Bu kod satırı tüm giriş öğelerini devre dışı bırakacaktır

$('#yourdiv *').prop('disabled', true);

bence en iyi cevap.
Ajay2707

2

Bunu yalnızca 'devre dışı' HTML özelliğini kullanarak gerçekleştirmeye ne dersiniz?

<form>
 <fieldset disabled>
  <div class="row">
   <input type="text" placeholder="">
   <textarea></textarea>
   <select></select>
  </div>
  <div class="pull-right">
    <button class="button-primary btn-sm" type="submit">Submit</button>
  </div>
 </fieldset>
</form>

Sadece alan setine devre dışı bırakılarak o alan setinin içindeki tüm alanlar devre dışı bırakılır.

$('fieldset').attr('disabled', 'disabled');

1

Aşağıdaki fonksiyonu çeşitli noktalarda kullanıyorum. Sağ seçici kullanıldığı sürece bir tablodaki div veya düğme öğelerinde çalışır. Sadece ": button" benim için yeniden etkinleştirmez.

function ToggleMenuButtons(bActivate) {
    if (bActivate == true) {
        $("#SelectorId :input[type='button']").prop("disabled", true);
    } else {
        $("#SelectorId :input[type='button']").removeProp("disabled");
    }
}

ikisi bir arada harika.
3 kural

0

Aşağıda tüm giriş devre dışı bırakılacak, ancak btn sınıfı kullanılamayacak ve ayrıca devre dışı css üzerine yazmak için sınıf eklenmeyecektir.

$('#EditForm :input').not('.btn').attr("disabled", true).addClass('disabledClass');

css sınıfı

.disabledClass{
  background-color: rgb(235, 235, 228) !important;
}

0

Benim için kabul edilen cevap, devre dışı bırakılan bazı asp net gizli alanları olduğu için işe yaramadı, bu yüzden sadece görünür alanları devre dışı bırakmayı seçtim

//just to save the list so we can enable fields later
var list = [];
$('#parent-selector').find(':input:visible:not([readonly][disabled]),button').each(function () {
    list.push('#' + this.id);
});

$(list.join(',')).attr('readonly', true);

0

Div Öğelerini Düzenleme'yi önlemek için CSS Sınıfını kullanma

CSS:

.divoverlay
{
position:absolute;
width:100%;
height:100%;
background-color:transparent;
z-index:1;
top:0;
}

JS:

$('#divName').append('<div class=divoverlay></div>');

Veya sınıf adını HTML Etiketi'ne ekleyin. Div Öğelerinin düzenlenmesini önleyecektir.


0

Yalnızca metin türü

$(".form-edit-account :input[type=text]").attr("disabled", "disabled");

Yalnızca şifre türü

$(".form-edit-account :input[type=password]").attr("disabled", "disabled");

Yalnızca E-posta Türü

$(".form-edit-account :input[type=email]").attr("disabled", "disabled");

0

İçindeki formunuz divyalnızca form giriş öğeleri içeriyorsa, bu basit sorgu etiketin içindeki her öğeyi devre dışı bırakırform :

<div id="myForm">
    <form action="">
    ...
    </form>
</div>

Bununla birlikte, etkileri yalnızca giriş türü öğelerinde görüleceğinden, öğeleri girmekten başka bir şey devre dışı bırakacaktırform , bu nedenle her form türü için büyük ölçüde uygundur!

$('#myForm *').attr('disabled','disabled');

1
Lütfen ikinci cümlenizi düzeltin. Kodunuzun giriş olmayan öğeleri devre dışı bırakacağı söyleniyor, ancak daha sonra yalnızca giriş öğelerini etkileyeceğini söylüyor. Lütfen anlamınızı netleştirin. (Düzenli numara, bu arada - iyi cevap)
cssyphus
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.