web-dev-qa-db-de.com

jQuery-Gruppe von Radiobuttons .change-Methode

Ich arbeite mit einem Formular mit einem Optionsfeld, das Teil eines Radiosatzes ist und jeweils nur eines ausgewählt werden kann (kein Problem bei der Einzelauswahl). Eines dieser Funkgeräte muss einen Code auslösen, wenn es einen anderen Code auswählt, wenn es nicht ausgewählt ist (ein anderes Funkgerät ist ausgewählt). Ich verwende die .change-Methode. Der Code wird ausgelöst, wenn Sie darauf klicken, aber nicht, wenn die Auswahl verloren geht. Was ich möchte, ist, umzuschalten oder wissen zu können, wenn es die Auswahl verliert.

Ich könnte es tun, indem ich den anderen Funkgeräten .change-Methode Code hinzufüge, aber es gibt viele Radiosätze, und es wäre schmerzhaft, ich suche nach einer einmaligen Konfiguration.

Bearbeiten

Das Markup besteht aus ASP MVC Razor Engine wie folgt:

@Html.RadioButtonFor(x => x.SomeModel, new { @class = "special-radio" })
@* Other radios but without the 'specia-radio' class *@

js:

// logging
$(function(){
  $('.special-radio').change(function(){
    console.log('change');
  });
});

Die Änderung der Zeichenfolge wird nur angezeigt, wenn Sie auf das Radio 'Special Radio' klicken.

12
loki

Sie können dies tun, indem Sie das Änderungsereignis für die Funkgruppe auf diese Weise verwenden.

überprüfe diese Frage,

Überwachung, wenn ein Radioknopf nicht markiert ist

4
maximus ツ

Es wird kein Ereignis ausgelöst, wenn ein Radio nicht geprüft wird, da es redundant wäre. Versuchen Sie es stattdessen:

http://jsfiddle.net/hmartiro/g4YqD/1/

Es setzt ein Änderungsereignis auf den Radiosatz und löst nur ein Ereignis aus, wenn das ausgewählte Funkgerät speziell ist und ein anderes Ereignis.

3
hayk.mart

Wenn eine Klasse für nicht hinzugefügt werden kann. Sie können einen Container mit Kennung für diese Optionsfelder verwenden. Auf diese Weise können Sie das Änderungsereignis isolieren. DEMO FIDDLE

var prev_data;
$('#special_radios input').change(function(){
    var me = $(this);
    //running function for check
  $('#log').html('<p>firing event for check: '+ me.attr('id') +'</p>');
    if(prev_data)
      uncheck_method(prev_data);  
  prev_data = me;
});

//@param obj = jquery raidio object
function uncheck_method(obj){
    $('#log').append('<p>firing event for uncheck: '+obj.attr('id')+'</p>');
    obj.prop('checked', false) 
    //console.log($('#special_radios input:checked'));
}

​

html

<input type="radio" name="zz" id="5"/>
<div id="special_radios">
   <input type="radio" name="rx" id="1"/>
   <input type="radio" name="ry"  id="2" />
   <input type="radio" name="rz" id="3"/>
   <input type="radio" name="ra"  id="4"/>
</div>
<div id="log"></div>
​
2
Bob

Einfache Lösung

var newValue; // vale of checked radio button
var oldValue; // value of unchecked radio button

$('.special-radio').change(function(){
    oldValue = newValue;
    newValue = $(this).val();
});

Wenn oldValue und newValue gleich sind, bedeutet dies, dass das Kontrollkästchen nicht deaktiviert wurde.

0
Naween Niroshan