Frage Warum erkennt jQuery nicht, wenn ein Optionsfeld deaktiviert ist? [Duplikat]


Mögliche Duplikate:
JQuery $ (# radioButton) .change (...) feuert nicht während der Abwahl 

Ich habe folgende HTML / jQuery:

<input id="rb1" type="radio" name="rb" checked="true">
<input id="rb2" type="radio" name="rb">


$("#rb2").change(function () {
    if ($(this).is(":checked")) {
         alert('checked');
    }
    else {
        alert('unchecked');
    }
});

Wenn meine rb2 Optionsfeld wird durch Auswahl von rb1 nicht ausgewählt, das Änderungsereignis wird nicht ausgelöst. Warum ist das? Ist es möglich, dass dies funktioniert, ohne meinen Selektor so zu ändern, dass er mit beiden Eingaben übereinstimmt und dann die ID betrachtet?

Geige: http://jsfiddle.net/4uRWR/


7
2018-01-15 22:18


Ursprung


Antworten:


Das Änderungsereignis wird nur gesendet, wenn Sie das Element selbst ändern. Wenn Sie auf das andere Radio klicken, ändern Sie es nicht. Eine Lösung wäre, das Änderungsereignis bei jeder Eingabe zu beobachten: Radio, dann überprüfe einfach den Status des entsprechenden Optionsfelds:

$("input:radio").change(function () {
if ($("#rb2").is(":checked")) {
             alert('checked');
    }
    else {
        alert('unchecked');
    }
});

http://codepen.io/AlienHoboken/pen/akwjB


12
2018-01-15 22:22



Achten Sie bei jeder Eingabe auf Ihre Gruppe von Funkgeräten auf Änderungen, und prüfen Sie, ob eine bestimmte ausgewählt ist.

$("input[name=rb]").change(function () {
    if ($('#rb2').is(":checked")) {
        alert('checked');
    } else {
        alert('unchecked');
    }
});

http://jsfiddle.net/4uRWR/2/


7
2018-01-15 22:22



Sie können eine "Änderung" an Optionsfeldern aus derselben Gruppe künstlich auslösen, so dass der ursprüngliche gebundene Handler abgeholt und "nicht markiert" ausgegeben wird. Der Trick besteht darin, zu vermeiden, in einer Endlosschleife stecken zu bleiben, indem das Ereignis rekursiv erneut ausgelöst wird. Dies können wir vermeiden, indem wir künstliche Ereignisse ignorieren, denen das Ereignis fehlt originalEvent Eigentum:

$("input[type=radio]").on("change", function (e) {
  var $this = $(this);

  //all inputs with the same name
  var $targetInputSelector = $("input[name=" + $this.attr("name") + "]");

  //check if the handler was fired "naturally"
  //if yes, trigger the change handler "artificially" for inputs with the same name
  if (e.hasOwnProperty('originalEvent')) {
    //exclude the element that was changed "naturally"
    //from the subset of all the elements with the same name
    $targetInputSelector.not($this).triggerHandler("change");
  }
});

Dieser Code funktioniert, wenn er oben auf Ihrem aktuellen Handler hinzugefügt wird und die Anforderungen erfüllt ohne meinen Wähler zu ändern, um beide Eingaben zu treffen und dann die ID zu betrachten Kriterien;)

http://jsfiddle.net/a73tn/24/


1
2018-01-15 23:41



Ich bin vor ein paar Tagen auf dieses Problem gestoßen. Anstatt auf einen individuellen Klick auf einen Radioknopf zu warten, höre ich auf einen Klick auf den <ul> Ich habe sie in und rufen Sie dann diese Funktion, um zu überprüfen, ob eine ausgewählt wurde.

// Iterate over the radio group and determine if one of them is selected
function loopRadBtns(btnGroup)
{
    var isChecked = false;

    btnGroup.find('input[type="radio"]').each(function()
    {
        if($(this).attr('checked'))
        {
            isChecked = true;
        }
    });
    return isChecked;
}

0
2018-01-15 22:29