Textfeld mit jquery deaktivieren?

102

Ich habe drei Optionsfelder mit demselben Namen und unterschiedlichen Werten. Wenn ich auf das dritte Optionsfeld klicke, werden das Kontrollkästchen und das Textfeld deaktiviert. Wenn ich jedoch zwei andere Optionsfelder auswähle, müssen sie angezeigt werden. Ich benötige die Hilfe in Jquery. Danke voraus ....

<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>
svk
quelle
3
Sie sollten die identischen IDs entfernen. names kann identisch sein, aber ids muss eindeutig sein.
Eric

Antworten:

207

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"); 
        }
      });

  });
OK W
quelle
@vinothkumar: Matts Antwort ist effizienter. Nehmen Sie meins als nicht so gutes Beispiel.
OK,
Hier können wir den i-Wert definieren.
SVK
@vinothkumar iwird von function(i)via JQuery's übergeben each(). i==2wird verwendet, um auf das 3. Optionsfeld zuzugreifen. Siehe meine Codes.
Ok,
Gnade für ältere Browser?
Sarepta
6
<span id="radiobutt">- Cousin von RadioHead?
Icemanind
27

Nicht wirklich notwendig, aber eine kleine Verbesserung des Codes von okw, die den Funktionsaufruf beschleunigen würde (da Sie die Bedingung außerhalb des Funktionsaufrufs verschieben).

$("#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");
        });
    }
});
Matt Huggins
quelle
22

Dieser Thread ist etwas alt, aber die Informationen sollten aktualisiert werden.

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

Verwenden Sie die Methode .prop (), um DOM-Eigenschaften wie den aktivierten, ausgewählten oder deaktivierten Status von Formularelementen abzurufen und zu ändern.

$("#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);
    }
  });
});
mac10688
quelle
3
+1, aber ich habe festgestellt, dass Sie nicht removePropfür die deaktivierte Eigenschaft verwenden können. Die jQuery-Dokumente geben an, prop("disabled", false);stattdessen zu verwenden . api.jquery.com/prop/#prop-propertyName-value
Lee Grissom
1
Es ist weitaus besser, prop () zu verwenden. Ich hatte einige Probleme bei der Verwendung von attr () in Kontrollkästchen. Das erste Mal ist es in Ordnung, das zweite Mal keine Antwort. Verwenden Sie also prop (). +1 von mir
Brandelizer
11

Ich bin nicht sicher, warum einige dieser Lösungen .each () verwenden - es ist nicht notwendig.

Hier ist ein Arbeitscode, der deaktiviert wird, wenn das dritte Kontrollkästchen aktiviert wird. Andernfalls wird das deaktivierte Attribut entfernt.

Hinweis: Ich habe dem Kontrollkästchen eine ID hinzugefügt. Denken Sie auch daran, dass IDs in Ihrem Dokument eindeutig sein müssen. Entfernen Sie daher entweder die IDs auf den Radiobuttons oder machen Sie sie eindeutig

$("input:radio[name='userradiobtn']").click(function() {
    var isDisabled = $(this).is(":checked") && $(this).val() == "3";
    $("#chkbox").attr("disabled", isDisabled);
    $("#usertxtbox").attr("disabled", isDisabled);
});
ScottE
quelle
1
@ScottE: each()wurde verwendet, weil wir das 3. Optionsfeld erhalten möchten. Wir können auch verwenden $("input[type=radio]:eq(2)"). Ihre Methode identifiziert das Optionsfeld anhand des Werts, der natürlich auch gültig ist. :)
okw
Wenn der Benutzer zuerst das Kontrollkästchen aktiviert und Text in das Textfeld eingibt. Wenn er dann das Optionsfeld aktiviert, muss das Kontrollkästchen deaktiviert und das Textfeld deaktiviert werden. Wie kann ich das tun? Ich stelle diese Fragen, weil ich es bin anewbie ... Danke im Voraus ..
svk
@vinothkumar - unter Berücksichtigung dieser Anforderung hätte ich das js wahrscheinlich nicht wie oben eingerichtet, aber in diesem Fall überprüfen Sie einfach, ob das Element deaktiviert ist, und rufen Sie $ ("# usertxtbox"). val ("") auf dem I auf hätte
ScottE
8

Ich weiß, dass es keine gute Angewohnheit ist, eine alte Frage zu beantworten, aber ich gebe diese Antwort für Leute, die die Frage später sehen würden.

Der beste Weg, um den Status in JQuery zu ändern, ist jetzt durch

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

Bitte überprüfen Sie diesen Link für eine vollständige Illustration. Eingabe mit jQuery deaktivieren / aktivieren?

Ahmed Kamal
quelle
Laut der offiziellen Website von Jquery ist prop der richtige Weg. +1
Moiz Tankiwala
2

Ich hätte es etwas anders gemacht

 <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" />   

Beachten Sie das Klassenattribut

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

Auf diese Weise müssen Sie sich keine Gedanken über das Ändern des Javascript machen, wenn Sie weitere Optionsfelder hinzufügen müssen

S Philp
quelle
0

Ich vermute, Sie möchten wahrscheinlich ein "Klick" -Ereignis an eine Reihe von Optionsfeldern binden, den Wert des angeklickten Radiobuttons lesen und je nach Wert ein Kontrollkästchen und / oder ein Textfeld deaktivieren / aktivieren.

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
        }
    });
});
Niels Bom
quelle
Ich habe diese Arbeit mit dem mitgelieferten HTML nicht gemacht, aber das ist imho ziemlich einfach.
Niels Bom
0

Es tut mir leid, dass ich so spät auf der Party bin, aber ich sehe hier Raum für Verbesserungen. Nicht in Bezug auf "Textbox deaktivieren", sondern in Bezug auf die Auswahl der Radionbox und die Vereinfachung des Codes, wodurch sie für spätere Änderungen etwas zukunftssicherer wird.

Zunächst sollten Sie nicht .each () verwenden und den Index verwenden, um auf ein bestimmtes Optionsfeld hinzuweisen. Wenn Sie mit einem dynamischen Satz von Optionsfeldern arbeiten oder anschließend einige Optionsfelder hinzufügen oder entfernen, reagiert Ihr Code auf das falsche Optionsfeld!

Als nächstes, aber das war wahrscheinlich nicht der Fall, als das OP erstellt wurde, bevorzuge ich .on ('click', function () {...}) anstelle von click ... http: //api.jquery. Komm schon/

Zu guter Letzt könnte auch der Code einfacher und zukunftssicherer gemacht werden, indem das Optionsfeld anhand seines Namens ausgewählt wird (der jedoch bereits in einem Beitrag enthalten ist).

Also habe ich den folgenden Code erhalten.

HTML (basierend auf dem Code von okw)

<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-Code

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

MVC 4 @ Html.CheckBoxFür im Allgemeinen möchten Benutzer beim Aktivieren und Deaktivieren des Kontrollkästchens mvc Maßnahmen ergreifen.

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

Sie können die ID für die Steuerelemente definieren, die Sie ändern möchten, und in Javascript die folgenden Schritte ausführen

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

Sie können die Eigenschaft auch wie ändern

$("#txtEmpId").prop("disabled", true); 
$("#txtEmpId").prop("readonly", true); 
Rahul Sonone
quelle
0
$(document).ready(function () {
   $("#txt1").attr("onfocus", "blur()");
});

boateng
quelle
0

Ermitteln Sie den Wert der Optionsfelder und stimmen Sie mit jedem überein, wenn er 3 ist, und deaktivieren Sie ihn dann 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>

Gufran Hasan
quelle