Kontrollkästchen jquery set aktiviert


479

Ich habe bereits alle möglichen Wege ausprobiert, aber ich habe es immer noch nicht zum Laufen gebracht. Ich habe ein modales Fenster mit einem checkboxIch möchte, dass beim checkboxÖffnen des Modals das Aktivieren oder Deaktivieren auf einem Datenbankwert basieren sollte. (Ich habe das bereits mit anderen Formularfeldern gemacht.) Ich habe versucht, es überprüfen zu lassen, aber es hat nicht funktioniert.

Mein HTML-Div:

<div id="fModal" class="modal" >
    ...
    <div class="row-form">
        <div class="span12">
            <span class="top title">Estado</span>

          <input type="checkbox"  id="estado_cat" class="ibtn">
       </div>
    </div>             
</div>

und die jquery:

$("#estado_cat").prop( "checked", true );

Ich habe es auch mit versucht attrund andere hier in den Foren gesehen, aber keine scheint zu funktionieren. Kann mir jemand den richtigen Weg weisen?

EDIT: ok, mir fehlt hier wirklich etwas ... Ich kann mit Code aktivieren / deaktivieren, wenn sich das Kontrollkästchen auf der Seite befindet, aber es befindet sich im modalen Fenster, kann ich nicht. Ich habe Dutzende verschiedener Möglichkeiten ausprobiert ...

Ich habe einen Link, der das Modal öffnen soll:

und jquery, um den Klick zu "hören" und einige Operationen auszuführen, wie das Füllen einiger Textfelder mit Daten, die aus der Datenbank stammen. Alles funktioniert wie ich will, aber das Problem ist, dass ich das Kontrollkästchen nicht mit Code aktivieren / deaktivieren kann. Hilfe bitte!

$(function() {
 $(".editButton").click(function(){
       var id = $(this).data('id'); 
       $.ajax({
          type: "POST",
          url: "process.php",
          dataType:"json",
          data: { id: id, op: "edit" },
        }).done(function( data ) {
//the next two lines work fine, i.e., it grabs the value from database and fills the textboxes
          $("#nome_categoria").val( data['nome_categoria'] );
          $("#descricao_categoria").val( data['descricao_categoria'] );
//then I tried to set the checkbox checked (because its unchecked by default) and it does not work
           $("#estado_cat").prop("checked", true);
        $('#fModal').modal('show');
});
    evt.preventDefault();
    return false;
    });     
});

Welche Klasse wird auf modal div angewendet, wenn das modal geöffnet wird? Wie überprüfen Sie auch den Datenbankwert - Mit AJAX oder wird er bereits vorab abgerufen und in einer Variablen gespeichert?
user1428716

Kontrollkästchen nach dem Laden des Modalfensters setzen Ich denke, Sie setzen das Kontrollkästchen vor dem Laden des Modalfensters. $ ('# fModal'). modal ('show'); $ ("# estado_cat"). attr ("geprüft", "geprüft");
Vineeth Bhaskaran

Antworten:


805

Sie müssen die 'Prop'-Funktion verwenden:

.prop('checked', true);

Vor jQuery 1.6 (siehe Antwort von user2063626 ):

.attr('checked','checked')

5
Sie scheinen die richtige Antwort zu haben. Könnten Sie näher darauf eingehen? stackoverflow.com/a/5876747/29182
Ziggy

1
Das ist gut zu wissen. Dies wurde übersehen, als die Migrationsdokumentation von jQuery 3.3.x
reaper_unique am

1
Gut zu wissen, dass Sie attr nicht in den neueren Versionen von jQuery verwenden können, wie ich ursprünglich dachte
Kaloyan

75

Ich nahm alle vorgeschlagenen Antworten und wandte sie auf meine Situation an. Ich versuchte, ein Kontrollkästchen basierend auf dem abgerufenen Wert true (sollte das Kontrollkästchen aktivieren) oder false (sollte das Kontrollkästchen nicht aktivieren) zu aktivieren oder zu deaktivieren. Ich versuchte alle oben genannten und fanden heraus, dass die Verwendung von .prop ("geprüft", wahr) und .prop ("geprüft", falsch ) die richtige Lösung war.

Ich kann noch keine Kommentare oder Antworten hinzufügen, aber ich fand, dass dies wichtig genug war, um die Konversation zu erweitern.

Hier ist der Langzeilcode für eine vollständige Kalenderänderung, der besagt, wenn der abgerufene Wert "allDay" wahr ist, aktivieren Sie das Kontrollkästchen mit der ID "even_allday_yn":

if (allDay)
{
    $( "#even_allday_yn").prop('checked', true);
}
else
{
    $( "#even_allday_yn").prop('checked', false);
}

48
Warum nicht einfach in einer einzigen Zeile? $( "#even_allday_yn").prop('checked', allDay);
Xavier Hayoz

3
Er versuchte die möglichen Werte zu demonstrieren. Wie würden Sie den wahren Wert des "allDay" ohne ein Beispiel wie dieses hier kennen?
Soroush Falahati

1
@ Xavier Hayoz. Dies funktioniert nur dann, wenn allDay 'true' oder 'false' als Wurfwert zurückgibt - nicht als reinen Binärwert. Kontrollkästchen sind in HTML schlecht gestaltet und ihr aktivierter Status kann auf sehr unterschiedliche Weise ausgedrückt werden. Der sichere und einzige Weg, den ich kenne, ist: allDay === 'true'? $ ('# even_allday_yn) .prop ("geprüft", wahr): $ (' # even_allday_yn) .prop ("geprüft", falsch). Beachten Sie den strengen Gleichheitsoperator.
Brice Coustillas

1
$('#even_allday_yn').prop('checked', allDay === true)wird funktionieren, weil allDay === truees ein boolesches Ergebnis gibt.
leftclickben

58

Alter versuchen Sie unten Code:

$("div.row-form input[type='checkbox']").attr('checked','checked')

ODER

$("div.row-form #estado_cat").attr("checked","checked");

ODER

$("div.row-form #estado_cat").attr("checked",true);

26
Verwenden Sie wie in der Antwort von KeyOfJ .prop('checked', true)anstelle von attr- Ich bin gerade auf dasselbe Problem gestoßen und es propfunktioniert.
Semmelbroesel

3
Zu Ihrer Information, wenn Sie den :checkedPseudo-Selektor oder andere native HTML-Funktionen des Kontrollkästchens verwenden möchten , müssen Sie diese verwenden .prop.
Benastan

1
Versuchte dies und es funktionierte nicht, aber als ich den Code in $ ("div.row-form #estado_cat") änderte. Prop ("geprüft", "geprüft"); es hat funktioniert. (Attr zu prop geändert).
Jim Evans

1
Leider ist prop jQuery 1.6 und höher. Wenn Sie also in einem Legacy-Framework stecken, das für Sie nicht funktioniert
Wolffer-East

.attr()ist der .prop()richtige Weg für frühere Versionen für jQuery 1.6+.
Vapcguy

26

Das Attribut "markiert" aktiviert das Kontrollkästchen, sobald es vorhanden ist. Um ein Kontrollkästchen zu aktivieren / deaktivieren, müssen Sie das Attribut setzen / deaktivieren.

Zum Aktivieren des Kontrollkästchens:

$('#myCheckbox').attr('checked', 'checked');

Zum Deaktivieren des Kontrollkästchens:

$('#myCheckbox').removeAttr('checked');

Zum Testen des geprüften Status:

if ($('#myCheckbox').is(':checked'))

Ich hoffe es hilft...


19

Da Sie sich in einem modalen Fenster befinden (ob dynamisch oder auf der Seite), können Sie den folgenden Code verwenden, um Ihr Ziel zu erreichen: (Ich bin auf meiner Website auf dasselbe Problem gestoßen, und so habe ich es behoben.)

HTML:

<div class="content-container" style="text-align: right;">
    <input type="checkbox" id="QueryGroupCopyQueries">
    <label for="QueryGroupCopyQueries">Create Copies</label>                                                   
</div>

CODE:

$.each(queriesToAddToGroup, function (index, query) {
    if (query.groupAddType === queriesGroupAddType.COPY) {

        // USE FIND against your dynamic window and PROP to set the value
        // if you are using JQUERY 1.6 or higher.
        $(kendoWindow).find("input#QueryGroupCopyQueries").prop("checked", true);

        return;
    }

Im obigen "kendoWindow" ist mein Fenster (meins ist dynamisch, aber ich mache das auch, wenn ich an ein Element direkt auf der Seite anhänge). Ich durchlaufe ein Array von Daten ("queriesToAddToGroup"), um festzustellen, ob Zeilen das Attribut COPY haben. In diesem Fall möchte ich das Kontrollkästchen im Fenster aktivieren, mit dem dieses Attribut festgelegt wird, wenn ein Benutzer in diesem Fenster speichert.


4
Es sollte beachtet werden, dass, während andere Antworten auf die propvorliegende Frage "funktionieren" können, die Verwendung, wie diese Antwort nahelegt, die RICHTIGE Methode ist, um das dynamische Kontrollkästchen jQuery zu aktivieren / zu deaktivieren.
Joshua Burns

11
.attr("checked",true)
.attr("checked",false)

Stellen Sie sicher, dass wahr und falsch nicht in Anführungszeichen stehen.


1
Attr aktiviert das Kontrollkästchen nicht, Prop ist derjenige, der die Überprüfung durchführt. Gefällt .prop('checked', true);
mir

@casivaagustin Abhängig von der jQuery-Version. Ich glaube, früher als jQuery 1.6 hat .attr()es funktioniert, wie beschrieben.
Vapcguy

5

Sie können wie unten angegeben Code schreiben.

HTML

<input type="checkbox"  id="estado_cat" class="ibtn">

jQuery

$(document).ready(function(){
    $(".ibtn").click(function(){
        $(".ibtn").attr("checked", "checked");
    });
});

Hoffe es funktioniert für dich.


4

Wenn Sie diese Funktion für ein GreaseMonkey-Skript verwenden möchten, um automatisch ein Kontrollkästchen auf einer Seite zu aktivieren, beachten Sie, dass das einfache Festlegen der aktivierten Eigenschaft möglicherweise nicht die zugehörige Aktion auslöst. In diesem Fall wird das Kontrollkästchen wahrscheinlich "angeklickt" (und auch die aktivierte Eigenschaft festgelegt).

$("#id").click()

3
$("#divParentClip").find("#subclip_checkbox")[0].checked=true;

Find gibt ein Array zurück. Verwenden Sie daher [0], um zu ermitteln, ob nur ein Element vorhanden ist

Wenn Sie find nicht verwenden, dann

$("#subclip_checkbox").checked=true;

In Mozilla Firefox hat das für mich gut funktioniert


1
Dies funktioniert, alle anderen Lösungen werden nicht erkannt, wenn Sie einen: überprüften Stil in Ihrem CSS haben
bhappy


2

Versuchen Sie dies, da Sie wahrscheinlich die jQuery-Benutzeroberfläche verwenden (falls nicht, kommentieren Sie dies bitte).

 $("#fModal" ).dialog({
     open: function( event, ui ) {

     if(//some hidden value check which stores the DB value==expected value for
      checking the Checkbox)

         $("div.row-form input[type='checkbox']").attr('checked','checked');

    }
   });

@ user2063626 - der Teil des js innerhalb der Funktion wird von Ihrer Antwort kopiert
user1428716

2

Haben Sie versucht, $("#estado_cat").checkboxradio("refresh")auf Ihrem Kontrollkästchen zu laufen ?


2

Das funktioniert.

 $("div.row-form input[type='checkbox']").attr('checked','checked');

2

Ich bin auch auf dieses Problem gestoßen.

und hier ist mein alter funktioniert nicht Code

if(data.access == 'private'){
     Jbookaccess.removeProp("checked") ; 
    //I also have tried : Jbookaccess.removeAttr("checked") ;
 }else{
    Jbookaccess.prop("checked", true)
}

Hier ist mein neuer Code, der jetzt funktioniert:

if(data.access == 'private'){
     Jbookaccess.prop("checked",false) ;
 }else{
    Jbookaccess.prop("checked", true)
}

Stellen Sie daher vor dem Funktionieren sicher, dass die überprüfte Eigenschaft vorhanden ist und nicht entfernt wurde.


Viel einfacher:Jbookaccess.prop("checked", data.access != 'private');
Legionär

2

Dies liegt daran, dass Sie mit der neuesten Version von jquery attr('checked')zurückkehren, 'checked'während Sie prop('checked')zurückkehren true.


2
<body>
      <input id="IsActive" name="IsActive" type="checkbox" value="false">
</body>

<script>
    $('#IsActive').change(function () {
         var chk = $("#IsActive")
         var IsChecked = chk[0].checked
         if (IsChecked) {
          chk.attr('checked', 'checked')
         } 
         else {
          chk.removeAttr('checked')                            
         }
          chk.attr('value', IsChecked)
     });
</script>

Dies funktioniert gut in Chrom und Firefox
reza akhlaghi

1

Aktivieren Sie das Kontrollkästchen nach dem Laden des modalen Fensters. Ich denke, Sie aktivieren das Kontrollkästchen, bevor Sie die Seite laden.

$('#fModal').modal('show');
$("#estado_cat").attr("checked","checked");

1

Ich weiß, dass dies eine Jquery-Lösung erfordert, aber ich möchte nur darauf hinweisen, dass es sehr einfach ist, dies in einfachem Javascript umzuschalten.

var element = document.getElementById("estado_cat");
element.checked = 1;

Es wird in allen aktuellen und zukünftigen Versionen funktionieren.


0
<div class="custom-control custom-switch">
      <input type="checkbox" class="custom-control-input" name="quiz_answer" id="customSwitch0">
      <label class="custom-control-label" for="customSwitch0"><span class="fa fa-minus fa-lg mt-1"></span></label>
  </div>

Denken Sie daran, die ID und das for-Attribut zu erhöhen. Kontrollkästchen Für dynamisch hinzugefügten Bootstrap.

$(document).on('change', '.custom-switch', function(){
    let parent = $(this);
    parent.find('.custom-control-label > span').remove();
    let current_toggle = parent.find('.custom-control-input').attr('id');
    if($('#'+current_toggle+'').prop("checked") == true){
        parent.find('.custom-control-label').append('<span class="fa fa-check fa-lg mt-1"></span>');
    }
    else if($('#'+current_toggle+'').prop("checked") == false){
        parent.find('.custom-control-label').append('<span class="fa fa-minus fa-lg mt-1"></span>');
    }
})
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.