Frage

Ich habe mehrere Kontrollkästchen. Wenn ein Benutzer prüft jede von ihnen muss ich sehen, ob sie berechtigt sind, das zu tun, wenn nicht, teilen sie und es deaktivieren. Allerdings bekommen diese mich in einer Schleife, wie es um die Änderung wieder auslöst! Wie kann ich das über kommen?

$('#step_1, #step_2, #step_3, #step_4').change(function(event) {
        if(!$('#section_2_active').attr('checked')){
            alert('You can not select output options when "Create Output" has not been selected.');

            $(this).attr('checked', false);

            $('#other_stages :checkbox:not(#section_2_active, #co_t)').change();
        }

});

Das kann ich nicht unbind und dann das Änderungsereignis rebind wie es ein anderes Plugin ist, die auf dieser Veranstaltung angewiesen ist.

Was andere Optionen habe ich? Ich kann einen Funktionsaufruf an jedem Checkbox anhängen aber ich hoffe für etwas ein bisschen mehr elegant, wenn nicht, ich dies nicht erfüllt.

Vielen Dank an Alle für jede Hilfe

War es hilfreich?

Lösung

Sie können mit .trigger() einen zusätzlichen Parameter zu Ihrem Handler übergeben, werden wir loop verwenden. Wenn es false, laufen nicht den anderen Elementen Trigger wieder, wie folgt aus:

$('#step_1, #step_2, #step_3, #step_4').change(function(event, loop) {
  if(!$('#section_2_active').attr('checked')){
    alert('You can not select output options when "Create Output" has not been selected.');
    $(this).attr('checked', false);
    if(loop !== false) 
      $('#other_stages :checkbox:not(#section_2_active, #co_t)').trigger('change', false);
  }
});

Andere Tipps

The simplest change is something like this:

var inClickHandler = false;

function OnChecked(evt) { 
  if (inClickHandler) {
    inClickHandler = false;
    return;
  }
  inClickHandler = true;

  // Do your stuff.
}

Why do you call this line? $('#other_stages :checkbox:not(#section_2_active, #co_t)').change(); As far as I can see you don't need this and it won't then loop. The checkbox will still check unless you use event.preventDefault(); and the .attr('checked',false); won't trigger change, probably because of the issues you're having.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top