jquery kullanarak metin kutusu devre dışı bırakılsın mı?


104

Aynı ada ve farklı değerlere sahip üç radyo düğmem var. Üçüncü radyo düğmesini tıkladığımda onay kutusu ve metin kutusu devre dışı bırakılacak, ancak diğer iki radyo düğmesini seçtiğimde gösterilmesi gerekiyor.Jquery'de yardıma ihtiyacım var. Teşekkürler ilerlemek....

<form name="checkuserradio">
    <input type="radio" value="1" name="userradiobtn" id="userradiobtn"/> 
    <input type="radio" value="2" name="userradiobtn" id="userradiobtn"/>
    <input type="radio" value="3" name="userradiobtn" id="userradiobtn"/>
    <input type="checkbox" value="4" name="chkbox" />
    <input type="text" name="usertxtbox" id="usertxtbox" />
</form>

3
Aynı kimlikleri kaldırmalısınız. names aynı olabilir, ancak idbenzersiz olmalıdır.
Eric

Yanıtlar:


209

HTML

<span id="radiobutt">
  <input type="radio" name="rad1" value="1" />
  <input type="radio" name="rad1" value="2" />
  <input type="radio" name="rad1" value="3" />
</span>
<div>
  <input type="text" id="textbox1" />
  <input type="checkbox" id="checkbox1" />
</div>

Javascript

  $("#radiobutt input[type=radio]").each(function(i){
    $(this).click(function () {
        if(i==2) { //3rd radiobutton
            $("#textbox1").attr("disabled", "disabled"); 
            $("#checkbox1").attr("disabled", "disabled"); 
        }
        else {
            $("#textbox1").removeAttr("disabled"); 
            $("#checkbox1").removeAttr("disabled"); 
        }
      });

  });

@vinothkumar: Matt'in cevabı daha verimli. Benimkini pek iyi olmayan bir örnek olarak al.
okw

Burada i değerini tanımlayabileceğimiz yer.
svk

@vinothkumar i, JQuery'ler function(i)aracılığıyla aktarılır each(). i==23. radyo düğmesine erişmek için kullanılır. Kodlarıma bakın.
okw

eski tarayıcılar için herhangi bir merhamet?
sarepta

6
<span id="radiobutt">- RadioHead'in kuzeni mi?
Icemanind

27

Gerçekten gerekli değil, ancak okw'nin kodunda işlevin daha hızlı çağrılmasını sağlayacak küçük bir iyileştirme (koşulu işlev çağrısının dışına taşıdığınız için).

$("#radiobutt input[type=radio]").each(function(i) {
    if (i == 2) { //3rd radiobutton
        $(this).click(function () {
            $("#textbox1").attr("disabled", "disabled");
            $("#checkbox1").attr("disabled", "disabled");
        });
    } else {
        $(this).click(function () {
            $("#textbox1").removeAttr("disabled");
            $("#checkbox1").removeAttr("disabled");
        });
    }
});

22

Bu ileti dizisi biraz eski ancak bilgilerin güncellenmesi gerekiyor.

http://api.jquery.com/attr/

Form öğelerinin işaretli, seçili veya devre dışı bırakılmış durumu gibi DOM özelliklerini almak ve değiştirmek için .prop () yöntemini kullanın.

$("#radiobutt input[type=radio]").each(function(i){
$(this).click(function () {
    if(i==2) { //3rd radiobutton
        $("#textbox1").prop("disabled", true); 
        $("#checkbox1").prop("disabled", true); 
    }
    else {
        $("#textbox1").prop("disabled", false); 
        $("#checkbox1").prop("disabled", false);
    }
  });
});

3
+1, ancak removePropdevre dışı bırakılan mülk için kullanamayacağınızı öğrendim . JQuery belgeleri prop("disabled", false);bunun yerine kullanmayı söylüyor . api.jquery.com/prop/#prop-propertyName-value
Lee Grissom

1
prop () kullanmanın çok daha iyi bir yoludur. Onay kutularında attr () kullanma konusunda bazı sorunlar yaşadım. İlk kez tamam, ikinci kez yanıt yok. Bu nedenle prop () kullanın. +1 benden
brandelizer

11

Bu çözümlerden bazılarının neden .each () kullandığından emin değilim - bu gerekli değil.

İşte 3. onay kutusu tıklandığında devre dışı bırakan, aksi takdirde devre dışı bırakılan özelliği kaldıran bazı çalışma kodları.

Not: Onay kutusuna bir kimlik ekledim. Ayrıca, kimliklerin belgenizde benzersiz olması gerektiğini unutmayın, bu nedenle radyo düğmelerindeki kimlikleri kaldırın veya onları benzersiz yapın

$("input:radio[name='userradiobtn']").click(function() {
    var isDisabled = $(this).is(":checked") && $(this).val() == "3";
    $("#chkbox").attr("disabled", isDisabled);
    $("#usertxtbox").attr("disabled", isDisabled);
});

1
@ScottE: each()3. radyo düğmesini almak istediğimiz için kullanıldı. Biz de kullanabiliriz $("input[type=radio]:eq(2)"). Yönteminiz radyo düğmesini değere göre tanımlar, ki bu da tabii ki geçerlidir. :)
okw

kullanıcı önce onay kutusunu seçer ve metin kutusuna bir metin girerse ve ardından radyo düğmesini seçerse, işaretlenen onay kutusu işaretlenmemeli ve metin kutusu temizlenmelidir. Bunu nasıl yapabilirim ... Bu soruları sorarım çünkü ben anewbie ... Şimdiden teşekkürler ..
svk

@vinothkumar - bu gereksinimi göz önünde bulundurarak muhtemelen js'yi yukarıdaki gibi ayarlamazdım, ancak bu durumda, öğenin devre dışı olup olmadığını kontrol edin ve $ ("# usertxtbox"). val ("") I olurdu
ScottE

8

Eski bir soruyu cevaplamanın iyi bir alışkanlık olmadığını biliyorum ama bu cevabı daha sonra soruyu görecek insanlar için koyuyorum.

JQuery'deki durumu değiştirmenin en iyi yolu artık

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

Tam örnek için lütfen bu bağlantıyı kontrol edin. JQuery ile bir girişi devre dışı bırakmak / etkinleştirmek?


Jquery resmi web sitesine göre, pervane gitmenin yoludur. +1
Moiz Tankiwala

2

Ben biraz daha farklı yapardım

 <input type="radio" value="1" name="userradiobtn" id="userradiobtn" />   
 <input type="radio" value="2" name="userradiobtn" id="userradiobtn" />    
 <input type="radio" value="3" name="userradiobtn" id="userradiobtn" class="disablebox"/>   
 <input type="checkbox" value="4" name="chkbox" id="chkbox" class="showbox"/>    
 <input type="text" name="usertxtbox" id="usertxtbox" class="showbox" />   

Sınıf özniteliğine dikkat edin

 $(document).ready(function() {      
    $('.disablebox').click(function() {
        $('.showbox').attr("disabled", true);           
    });
});

Bu şekilde, daha fazla radyo düğmesi eklemeniz gerekirse, javascript'i değiştirme konusunda endişelenmenize gerek kalmaz


0

Tahminimce bir "tıklama" olayını bir dizi radyo düğmesine bağlamak, tıklanan radyo düğmesinin değerini okumak ve değere bağlı olarak bir onay kutusunu ve / veya metin kutusunu devre dışı bırakmak / etkinleştirmek isteyeceksiniz.

function enableInput(class){
    $('.' + class + ':input').attr('disabled', false);
}

function disableInput(class){
    $('.' + class + ':input').attr('disabled', true);
}

$(document).ready(function(){
    $(".changeBoxes").click(function(event){
        var value = $(this).val();
        if(value == 'x'){
            enableInput('foo'); //with class foo
            enableInput('bar'); //with class bar
        }else{
            disableInput('foo'); //with class foo
            disableInput('bar'); //with class bar
        }
    });
});

Bu işi sağlanan HTML ile yapmadım, ama bu oldukça kolay imho.
Niels Bom

0

Partiye bu kadar geç kaldığım için özür dilerim, ama burada biraz iyileştirme alanı görüyorum. "Metin kutusunu devre dışı bırakma" ile ilgili değil, radyon kutusu seçimi ve kod sadeleştirmesi ile ilgili, daha sonraki değişiklikler için biraz daha ileriye dönük hale getiriyor.

Her şeyden önce, .each () kullanmamalı ve belirli bir radyo düğmesini göstermek için dizini kullanmamalısınız. Dinamik bir radyo düğmeleri kümesiyle çalışırsanız veya daha sonra bazı radyo düğmeleri ekler veya kaldırırsanız, kodunuz yanlış düğmeye tepki verir!

Sonra, ama OP yapıldığında muhtemelen durum böyle değildi, ben http: //api.jquery öğesini click ... yerine .on ('click', function () {...}) kullanmayı tercih ederim. Hadi ama/

İlk olarak, ancak en önemlisi, kodun adına göre radyo düğmesi seçilerek daha basit ve ileride kanıtlanabilir (ancak bu zaten bir gönderide göründü).

Bu yüzden aşağıdaki kodu elde ettim.

HTML (okw koduna göre)

<span id="radiobutt">
    <input type="radio" name="rad1" value="1" />
    <input type="radio" name="rad1" value="2" />
    <input type="radio" name="rad1" value="3" />
</span>
<div>
    <input type="text" id="textbox1" />
    <input type="checkbox" id="checkbox1" />
</div>

JS kodu

$("[name='rad1']").on('click', function() {
    var disable = $(this).val() === "2";
    $("#textbox1").prop("disabled", disable); 
    $("#checkbox1").prop("disabled", disable); 
});

0

MVC 4 @ Html.CheckBoxFor genellikle insanlar mvc onay kutusunu işaretlemek ve işaretini kaldırmak isterler.

<div class="editor-field">
    @Html.CheckBoxFor(model => model.IsAll, new { id = "cbAllEmp" })
</div>

Değiştirmek istediğiniz kontroller için kimlik tanımlayabilirsiniz ve javascript'te aşağıdakileri yapın

<script type="text/javascript">
    $(function () {
        $("#cbAllEmp").click("", function () {
            if ($("#cbAllEmp").prop("checked") == true) {
                    $("#txtEmpId").hide();
                    $("#lblEmpId").hide();
                }
                else {
                    $("#txtEmpId").show();
                    $("#txtEmpId").val("");
                    $("#lblEmpId").show();
             }
        });
    });

özelliği de şu şekilde değiştirebilirsiniz:

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

0
$(document).ready(function () {
   $("#txt1").attr("onfocus", "blur()");
});


0

radyo düğmeleri değerini alın ve 3 ise devre dışı bırakılmışsa her biriyle eşleşir checkbox and textbox.

$("#radiobutt input[type=radio]").click(function () {
    $(this).each(function(index){
    //console.log($(this).val());
        if($(this).val()==3) { //get radio buttons value and matched if 3 then disabled.
            $("#textbox_field").attr("disabled", "disabled"); 
            $("#checkbox_field").attr("disabled", "disabled"); 
        }
        else {
            $("#textbox_field").removeAttr("disabled"); 
            $("#checkbox_field").removeAttr("disabled"); 
        }
      });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<span id="radiobutt">
  <input type="radio" name="groupname" value="1" />
  <input type="radio" name="groupname" value="2" />
  <input type="radio" name="groupname" value="3" />
</span>
<div>
  <input type="text" id="textbox_field" />
  <input type="checkbox" id="checkbox_field" />
</div>

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.