544 Stimmen

Wie kann ich die Markierung eines Optionsfeldes aufheben?

Ich habe eine Gruppe von Optionsfeldern, die ich deaktivieren möchte, nachdem ein AJAX-Formular mit jQuery übermittelt wird. Ich habe die folgende Funktion:

function clearForm(){
  $('#frm input[type="text"]').each(function(){
      $(this).val("");  
  });
  $('#frm input[type="radio":checked]').each(function(){
      $(this).checked = false;  
  });
 }

Mit Hilfe dieser Funktion kann ich die Werte in den Textfeldern löschen, aber ich kann die Werte der Optionsfelder nicht löschen.

Übrigens, ich habe auch versucht $(this).val(""); aber das hat nicht funktioniert.

841voto

David Hedlund Punkte 125085

Entweder (einfaches js)

this.checked = false;

oder (jQuery)

$(this).prop('checked', false);
// Note that the pre-jQuery 1.6 idiom was
// $(this).attr('checked', false);

Voir jQuery prop() Hilfeseite für eine Erklärung des Unterschieds zwischen attr() y prop() und warum prop() jetzt vorzuziehen ist.
prop() wurde mit jQuery 1.6 im Mai 2011 eingeführt.

97voto

James Wiseman Punkte 29172

Sie bräuchten nicht die each Funktion

$("input:radio").attr("checked", false);

Oder

$("input:radio").removeAttr("checked");

Das Gleiche sollte auch für Ihr Textfeld gelten:

$('#frm input[type="text"]').val("");

Aber Sie könnten dies verbessern

$('#frm input:text').val("");

30voto

cjstehno Punkte 12585

Versuchen Sie

$(this).removeAttr('checked')

Da viele Browser 'checked=anything' als wahr interpretieren. Dadurch wird das Attribut "checked" vollständig entfernt.

Ich hoffe, das hilft.

21voto

alkos333 Punkte 591

Leichte Modifikation von Laurynas' Plugin basierend auf Igors Code. Dies berücksichtigt mögliche Beschriftungen, die mit den anvisierten Optionsschaltflächen verbunden sind:

(function ($) {
    $.fn.uncheckableRadio = function () {

        return this.each(function () {
            var radio = this;
                $('label[for="' + radio.id + '"]').add(radio).mousedown(function () {
                    $(radio).data('wasChecked', radio.checked);
                });

                $('label[for="' + radio.id + '"]').add(radio).click(function () {
                    if ($(radio).data('wasChecked'))
                        radio.checked = false;
                });
           });
    };
})(jQuery);

21voto

igor Punkte 4913

Danke Patrick, du hast mir den Tag versüßt! Es ist mousedown Sie verwenden müssen. Allerdings habe ich den Code verbessert, so dass Sie eine Gruppe von Radio-Buttons behandeln können.

//We need to bind click handler as well
//as FF sets button checked after mousedown, but before click
$('input:radio').bind('click mousedown', (function() {
    //Capture radio button status within its handler scope,
    //so we do not use any global vars and every radio button keeps its own status.
    //This required to uncheck them later.
    //We need to store status separately as browser updates checked status before click handler called,
    //so radio button will always be checked.
    var isChecked;

    return function(event) {
        //console.log(event.type + ": " + this.checked);

        if(event.type == 'click') {
            //console.log(isChecked);

            if(isChecked) {
                //Uncheck and update status
                isChecked = this.checked = false;
            } else {
                //Update status
                //Browser will check the button by itself
                isChecked = true;

                //Do something else if radio button selected
                /*
                if(this.value == 'somevalue') {
                    doSomething();
                } else {
                    doSomethingElse();
                }
                */
            }
    } else {
        //Get the right status before browser sets it
        //We need to use onmousedown event here, as it is the only cross-browser compatible event for radio buttons
        isChecked = this.checked;
    }
}})());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X