JQuery ile giriş devre dışı bırakılsın / etkinleştirilsin mi?


Yanıtlar:


3810

jQuery 1.6+

Özelliği değiştirmek disablediçin .prop()işlevi kullanmalısınız .

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5 ve altı

.prop()Fonksiyon mevcut değil, .attr()benzer yapar:

Devre dışı bırakılmış özniteliği ayarlayın.

$("input").attr('disabled','disabled');

Tekrar etkinleştirmek için uygun yöntem .removeAttr()

$("input").removeAttr('disabled');

JQuery'nin herhangi bir sürümünde

Her zaman gerçek DOM nesnesine güvenebilirsiniz ve yalnızca bir öğeyle ilgileniyorsanız muhtemelen diğer iki seçenekten biraz daha hızlıdır:

// assuming an event handler thus 'this'
this.disabled = true;

.prop()Veya .attr()yöntemlerini kullanmanın avantajı, bir grup seçili öğe için özelliği ayarlayabilmenizdir.


Not: 1.6'da .removeProp()kulağa çok benzeyen bir yöntem vardır removeAttr(), ancak dokümantasyondan alıntı gibi yerel mülklerde KULLANILMAMALIDIR'disabled' :

Not: İşaretli, devre dışı veya seçilen gibi yerel özellikleri kaldırmak için bu yöntemi kullanmayın. Bu, özelliği tamamen kaldıracak ve kaldırıldıktan sonra öğeye tekrar eklenemez. Bu özellikleri bunun yerine false olarak ayarlamak için .prop () kullanın.

Aslında, bu yöntem için birçok meşru kullanım olduğundan şüphe duyuyorum, boolce sahne donanımı, 1.5'te "öznitelik" meslektaşları gibi "kaldırmak" yerine onları yanlış olarak ayarlamanız gerektiği şekilde yapılır


9
Bir kenara, TÜM form giriş denetimlerini devre dışı bırakmak istiyorsanız - dahil. onay kutuları, radyolar, metin, vb. - ':input'sadece seçmek zorunda değilsiniz 'input'. İkincisi yalnızca gerçek <input> öğelerini seçer.
Cornel Masson

35
@CornelMasson input,textarea,select,button kullanmaktan biraz daha iyidir :input- :inputçünkü bir seçici oldukça verimsizdir, çünkü *her öğenin üzerine dönüp tagname ile filtrelemek zorundadır - 4 tagname seçicisini doğrudan geçerseniz çok daha hızlıdır. Ayrıca, :inputstandart bir CSS seçici değildir, bu yüzden mümkün olan tüm performans kazançları querySelectorAllkaybolur
gnarf

3
Bu sadece kullanıcının erişmesini engelliyor mu yoksa web isteğinden gerçekten kaldırıyor mu?
OneChillDude

4
Kullanmak .removeProp("disabled") konusunu neden oldu o Firefox gibi bazı cezası çalışıyordu, oysa Chrome gibi bazı tarayıcılarda durumunda @ThomasDavidBaker tarafından sivri out gibi "özelliği tamamen ve yine eklenmeye kaldırıldı alma". Burada gerçekten dikkatli olmalıyız. .prop("disabled",false)Bunun yerine daima kullanın
Sandeepan Nath

6
Ankraj elemanlarını devre dışı bırakmak için .prop veya .attr dosyalarının hiçbiri yeterli değildir; .prop 'kontrolü' grileştirmez (.attr yapar, ancak href hala aktiftir). Ayrıca, cancelDefault () öğesini çağıran bir tıklama olay işleyicisi eklemeniz gerekir.
Jeff Lowery

61

Sadece yeni sözleşmeler uğruna ve ileride uyarlanabilir hale getirilmesi için (işler ECMA6 ile önemli ölçüde değişmedikçe (????):

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

ve

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12
Jikes! Neden $(document).on('event_name', '#your_id', function() {...})yerine $('#your_id').on('event_name', function() {...}). JQuery .on () belgelerinde açıklandığı gibi , eski temsilci temsilci kullanır ve tüm event_name olayları dinler documentve bir eşleşme olup olmadığını denetler #your_id. İkincisi özellikle $('#your_id')sadece olayları dinler ve bu daha iyi ölçeklenir.
Peter V.Mørch

23
Birincisi, DOM'a herhangi bir noktada eklenen öğeler için çalışır, ikincisi sadece o anda mevcut olanlar için.
crazymykl

1
@crazymykl Doğru, ancak sayfanızda zaten kimliği olan öğeler eklememelisiniz.
SepehrM

33
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

Bazen giriş veya metin alanı gibi form öğesini devre dışı bırakmanız / etkinleştirmeniz gerekir. Jquery, devre dışı özniteliği "devre dışı" olarak ayarlayarak bunu kolayca yapmanıza yardımcı olur. Örneğin:

  //To disable 
  $('.someElement').attr('disabled', 'disabled');

Devre dışı bırakılmış öğeyi etkinleştirmek için, bu öğeden "devre dışı" özelliğini kaldırmanız veya dizesini boşaltmanız gerekir. Örneğin:

//To enable 
$('.someElement').removeAttr('disabled');

// OR you can set attr to "" 
$('.someElement').attr('disabled', '');

bakın: http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html


13
$("input")[0].disabled = true;

veya

$("input")[0].disabled = false;

2
Tabii ki soru jQuery istedi ve bu durum düz JavaScript'te değişiyor, ancak çalışıyor.
basic6

1
Bu JavaScript'teki durumu değiştirir, ancak yine de ilk girişi almak için bir jQuery seçici kullanır.
cjsimon

3
Ama burada jquery ansiklopedisi yaptığımızı sanmıyorum, eğer bir cevap işe yararsa, iyi
Sajjad Shirazy

8

Bunu kodunuza global bir yere koyabilirsiniz:

$.prototype.enable = function () {
    $.each(this, function (index, el) {
        $(el).removeAttr('disabled');
    });
}

$.prototype.disable = function () {
    $.each(this, function (index, el) {
        $(el).attr('disabled', 'disabled');
    });
}

Sonra şöyle şeyler yazabilirsiniz:

$(".myInputs").enable();
$("#otherInput").disable();

3
İşlevselliği sarma kullanışlı olsa da, kullanmış olmalı propve değil attr ile disabledbunu (yukarıdaki jQuery 1.6 veya varsayarak) düzgün çalışması için mülk.
kodlama gitti

1
@TrueBlueAussie Kullanmanın dezavantajı nedir attr? Bazı projelerde yukarıdaki kodu kullanıyorum ve hatırladığım kadarıyla tamam
Nicu Surdu

1
Açık istisnalar, perde arkasındaki özelliklere sahip kontrollerdir. En ünlü olanı checkedonay kutularının mülkiyetidir. Kullanmak attraynı sonucu vermeyecektir.
Kodlama

7

Sadece mevcut durumu ters çevirmek istiyorsanız (açma / kapatma düğmesi davranışı gibi):

$("input").prop('disabled', ! $("input").prop('disabled') );

1
teşekkürler ben geçiş için aynı şey var; $ ("input"). prop ('devre dışı', işlev (i, v) {return! v;});
Floww

5

Bunları kullanmanın herhangi bir öğeyi etkinleştirmenin / devre dışı bırakmanın birçok yolu vardır :

Yaklaşım 1

$("#txtName").attr("disabled", true);

Yaklaşım 2

$("#txtName").attr("disabled", "disabled");

JQuery 1.7 veya daha üst bir sürümünü kullanıyorsanız, attr () yerine prop () kullanın.

$("#txtName").prop("disabled", "disabled");

Herhangi bir öğeyi etkinleştirmek istiyorsanız, öğeyi devre dışı bırakmak için yaptığınız işlemin tersini yapmanız yeterlidir. Ancak jQuery herhangi bir özniteliği kaldırmak için başka bir yol sağlar.

Yaklaşım 1

$("#txtName").attr("disabled", false);

Yaklaşım 2

$("#txtName").attr("disabled", "");

Yaklaşım 3

$("#txtName").removeAttr("disabled");

Yine, jQuery 1.7 veya daha yüksek bir sürümünü kullanıyorsanız, attr () yerine prop () kullanın. Öyle. JQuery kullanarak herhangi bir öğeyi nasıl etkinleştirir veya devre dışı bırakırsınız.


2

2018 güncellemesi:

Şimdi jQuery'ye gerek yok ve document.querySelector veya document.querySelectorAll(birden fazla öğe için) $ ile neredeyse aynı işi ve artı daha açık olanları getElementById,getElementsByClassName ,getElementsByTagName

"İnput-checkbox" sınıfının bir alanını devre dışı bırakma

document.querySelector('.input-checkbox').disabled = true;

veya birden çok öğe

document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);

1
soru özellikle jQuery hakkında soruyor ... ama aynı şekilde ifadeniz doğru ve artık birden fazla öğe olduğunda jQuery'nin bunun için kullanılması gerekmediğini bilmeye değer .
ADyson

2

JQuery kullanarak form öğesini devre dışı bırakmak veya etkinleştirmek veya dinamik olarak denetlemek için jQuery prop () yöntemini kullanabilirsiniz. Prop () yöntemi jQuery 1.6 ve üzerini gerektirir.

Misal:

<script type="text/javascript">
        $(document).ready(function(){
            $('form input[type="submit"]').prop("disabled", true);
            $(".agree").click(function(){
                if($(this).prop("checked") == true){
                    $('form input[type="submit"]').prop("disabled", false);
                }
                else if($(this).prop("checked") == false){
                    $('form input[type="submit"]').prop("disabled", true);
                }
            });
        });
    </script>

1

Devre Dışı:

$('input').attr('readonly', true); // Disable it.
$('input').addClass('text-muted'); // Gray it out with bootstrap.

Etkinleştirme:

$('input').attr('readonly', false); // Enable it.
$('input').removeClass('text-muted'); // Back to normal color with bootstrap.

1

Giriş türü için true değerini devre dışı bırak:

Belirli bir giriş tipi olması durumunda ( Örn. Metin tipi girişi )

$("input[type=text]").attr('disabled', true);

Her tür giriş tipi için

$("input").attr('disabled', true);

1
Teşekkürler bu bir giriş ismini izole etmeme yardımcı oldu. $("input[name=method]").prop('disabled', true);
Harry Bosh

1

bu benim için çalışıyor

$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);

0

@Gnarf yanıtı kullandım ve fonksiyon olarak ekledim

   $.fn.disabled = function (isDisabled) {
     if (isDisabled) {
       this.attr('disabled', 'disabled');
     } else {
       this.removeAttr('disabled');
     }
   };

Öyleyse böyle kullan

$('#myElement').disable(true);

0

2018, JQuery (ES6) olmadan

Tümünü devre dışı bırak input:

[...document.querySelectorAll('input')].map(e => e.disabled = true);

Devre Dışı inputileid="my-input"

document.getElementById('my-input').disabled = true;

Soru ile sadece Bilginize var, JQuery.



0

Bunun gibi kullanın,

 $( "#id" ).prop( "disabled", true );

 $( "#id" ).prop( "disabled", false );

-1
<html>
<body>

Name: <input type="text" id="myText">



<button onclick="disable()">Disable Text field</button>
<button onclick="enable()">Enable Text field</button>

<script>
function disable() {
    document.getElementById("myText").disabled = true;
}
function enable() {
    document.getElementById("myText").disabled = false;
}
</script>

</body>
</html>

1
İnceleme kuyruğundan : Lütfen yanıtınıza daha fazla bağlam eklemenizi isteyebilir miyim? Yalnızca kod yanıtlarının anlaşılması zordur. Gönderinize daha fazla bilgi ekleyebilmeniz hem askerlere hem de gelecekteki okuyuculara yardımcı olacaktır.
RBT

-1

JQuery Mobile'da:

Devre dışı bırakmak için

$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');

Etkinleştirmek için

$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
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.